pętla for tablica wielowymiarowa na ekran

0

Mam problem otóż chcę wypisać tablicę wielowymiarową na ekran jednak nie wychodzi mi to ;/
Oto mój kod:

 #include <iostream>
using namespace std;

char obraz[32][64]=
{
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
	"#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#",
};
char *wsk = &obraz[0][0];
int main()
{
	cout << "tablica\n";
	for(;wsk++;) // tutaj nie umiem dobrze ustawić
	{
             cout << wsk << "\n";
	}
	cin.ignore();cin.get();
}

Chciałbym aby ta tablica była na ekranie jednak nie umiem jej wypisać ( te kropki i krzaczki)

1

Różnie można to zrobić z taką tablicą. Najprościej możesz zrobić to zrobić bezpośrednio - podwójną pętlą. Chyba wiesz o co chodzi? wsk jest niepotrzebne.

for(int i = 0; i < 32; ++i ) {
  for (int j = 0; j < 64; ++j) {
    cout << obraz[i][j];
  }
}

Zastanów się jak to działa i gdzie masz wsadzić przejście do nowego wiersza.

Możesz potem poczytać jak przechowywana jest taka tablica i zrobić to samo jednym indeksem, podobne rozumowanie doprowadzi Cię do wykorzystania jednego wskaźnika.

(A poza tym są inne rozwiązania)

Edit:
Policzyłem sobie te znaczki i okazuje się, że takie podejście jest bardzo niemądre. Każdą linijkę możesz wypisać jako normalny napis, bo ze względu na niewykorzystane miejsce masz tam dużo zer i łańcuchy są poprawnie zakończone. Zobacz trzy posty niżej.

0

aha czyli pętla powinna wyglądać tak:

 for(int i = 0; i < 32; ++i ) 
	{
		for (int j = 0; j < 64; ++j) 
			{
				cout << obraz[i][j];
			}
		cout << "\n";
	}

I teraz działa :D Dziękuję wam za pomoc :-)

1
char *obraz[]=
{
        "#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#\0",
        "#...#.#.#.#.####.#.#.#.#.#.#.#.#.#.#.#\0",
        ...
        0
};
int main()
{
        cout << "tablica\n";
        for(char **wsk=obraz[0];*wsk;++wsk)
        {
             cout << *wsk << "\n";
        }
        cin.ignore();cin.get();
}
1

A po co pisać po jednym znaku?

for (int i = 0; i < 32; ++i)
    cout << obraz[i] << "\n";
0

Nie wiem czy pisać tutaj czy gdzie indziej ale teraz takie pytanie jak tą tablicę obrócić o 90 stopni w prawo ??
Wiem tylko, że macierzą transponowaną

1
for (int j = 0; j < 64; ++j) 
        {
                 for(int i = 0; i < 32; ++i ) 
                        {
                                cout << obraz[i][j];
                        }
                cout << "\n";
        }
1
for (int j = 0; j < 64; ++j) 
        {
                 for(int i = 32-1; i >= 0; --i ) 
                        {
                                cout << obraz[i][j];
                        }
                cout << "\n";
        }
0

Teraz jest wszystko Dobrze dziękuję Wszystkim Uczestniczącym w tym wątku za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1