• 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

0 głosów
369 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ź 445 wizyt
0 głosów
2 odpowiedzi 383 wizyt
0 głosów
1 odpowiedź 238 wizyt

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,225 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...