• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niechciana spacja w wyświetlaniu litery w konsoli

Object Storage Arubacloud
0 głosów
155 wizyt
pytanie zadane 28 grudnia 2016 w C i C++ przez niezalogowany

Witam, otrzymałem zadanie stworzenia coś ala sapera na podstawie instrukcji zawartych w treści. Mam problem z niechcianą spacją w wyświetlaniu obiektu sapera obok miny.

Funkcja odpowiedzialna za wyświetlanie planszy:

void plansza(PoleMinowe m, Punkt s, int x, int y)
{
	bool flaga = true;
	for (int i = 0; i < rozmiar; i++)
	{
		for (int j = 0; j < rozmiar; j++)
		{
			for (int k = 0; k < m.liczbaMin; k++)
			{
				if ((m.miny[k].x == j) && (m.miny[k].y == i))
					cout << 'x';

				if (s.x == m.miny[k].x && s.y == m.miny[k].y)
					flaga = false;
			}
			if (s.x == j && s.y == i && flaga == true)
			{
				cout << "o";
			}
			else cout << " ";

		}
		cout << endl;
	}
	cout << "Kontrola: W - gora, S - dol, A - lewo, D - prawo" << endl;
	cout << "Saper x: " << s.x << ", y: " << s.y << endl << endl;
	if (defuse(mm, ss) == false)
	{
		cout << "Uwaga mina!" << endl;
	}
	for (int i = 0; i < m.liczbaMin; i++)
		cout << "Mina nr " << i + 1 << " x: " << m.miny[i].x << " y: " << m.miny[i].y << endl << endl;
	
}

Screeny pokazujące o co dokładnie mi chodzi:

Na ostatnim screenie widać o co mi chodzi.

2 odpowiedzi

0 głosów
odpowiedź 28 grudnia 2016 przez d0n Mądrala (6,440 p.)

Cześć,
 Bardzo trudno mi zrozumieć o co chodzi. Czy problemem jest to, że między koordynatami sapera, a ostrzeżeniem o minie jest linijka roznicy? Jeżeli tak, to proponuję takie zmiany w kodzie (linijki 26 - 30):
 

    cout << "Saper x: " << s.x << ", y: " << s.y << endl ;
    if (defuse(mm, ss) == false)
    {
        cout << "Uwaga mina!";
    }
    cout << endl;

 

komentarz 28 grudnia 2016 przez niezalogowany
Spójrz na literę "o"(saper) na samej górze i "X"(mina) obok niej na każdym screenie, porównaj to z koordynatami poniżej. Chodzi o to, że jak saper jest po lewej stronie miny ("X") to jest przy niej bez spacji, natomiast jak jest po prawej to wyświetla się ze spacją.
0 głosów
odpowiedź 28 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Oczekujesz, aby każdy napis zajmował taką samą szerokość? Tzn. aby napisy bez względu na długość były równo oddalone, jakby oddzielone marginesami? Zmanipuluj strumień wyjścia wg potrzeb poleceniem setw(), gdzie jako argument podajesz szerokość pola. Np.:

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
    cout << "Napis 1" << "Napis 2" << "Napis 3" << endl;
    cout << "Napis 1" << setw(8) << "Napis 2" << setw(10) << "Napis 3" << endl;
    return 0;
}

Otrzymasz tym samym na wyjściu:

Napis 1Napis 2Napis 3
Napis 1 Napis 2   Napis 3
komentarz 28 grudnia 2016 przez niezalogowany
Spójrz na literę "o"(saper) na samej górze i "X"(mina) obok niej na każdym screenie, porównaj to z koordynatami poniżej. Chodzi o to, że jak saper jest po lewej stronie miny ("X") to jest przy niej bez spacji, natomiast jak jest po prawej to wyświetla się ze spacją.
komentarz 28 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Ok, już rozumiem o co chodzi, jednak nie wiem w jaki sposób pozbyć się tej spacji, jedyne co mógłbym zasugerować to nie wychodzić z pętli, jednak wątpię, aby to pomogło:

for (int i = 0; i < rozmiar; i++)
{
    for (int j = 0; j < rozmiar; j++)
    {
        for (int k = 0; k < m.liczbaMin; k++)
        {
            if ((m.miny[k].x == j) && (m.miny[k].y == i))
                cout << 'x';
            if (s.x == m.miny[k].x && s.y == m.miny[k].y)
                flaga = false;
            if (s.x == j && s.y == i && flaga == true)
                cout << "o";
            else cout << " ";
        }
    cout << endl;
}

Bardziej naturalnym byłoby wg mnie utworzenie tablicy dwuwymiarowej, wtedy miałbyś większą kontrolę nad wyświetlaniem odpowiednich symboli, jednak wymusiłoby to spore przekształcenie kodu, co przysporzyłoby sporo roboty...

komentarz 28 grudnia 2016 przez niezalogowany
Wiem, że stworzenie dwuwymiarowej tablicy byłoby dużo lepsze, ale niestety takie rozwiązanie jest wymagane w zadaniu.
komentarz 28 grudnia 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Przepraszam, ale nie potrafię nic więcej wymyślić...
1
komentarz 28 grudnia 2016 przez niezalogowany
Nie ma za co. Dziękuję za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 274 wizyt
0 głosów
2 odpowiedzi 193 wizyt
0 głosów
1 odpowiedź 115 wizyt

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...