(C++) 2-D-Array-.-

meifer

Grünschnabel
Hi,
ich habe ein Problem bei dem Ausgeben von einem 2-Dimensionalen Array. Dieses Array soll eine einfache karte aus Zeichen ausgeben.

Code:
char karte[21][21];

ich habe ihm alle Daten gegeben, die er braucht und will das dieser die anschließend alle wieder ausgibt:

Code:
while(i<21)
	{	
		int j=0;// j=0
		cout << karte[i][j]; // 1
		j++; // j=1
		cout << karte[i][j]; // 2
		j++; // j=2
		cout << karte[i][j]; // 3
		j++; // j=3
		cout << karte[i][j]; // 4
		j++; // j=4
		cout << karte[i][j]; // 5
		j++; // j=5
		cout << karte[i][j]; // 6
		j++; // j=6
		cout << karte[i][j]; // 7
		j++; // j=7
		cout << karte[i][j]; // 8
		j++; // j=8
		cout << karte[i][j]; // 9
		j++; // j=9
		cout << karte[i][j]; // 10
		j++; // j=10
		cout << karte[i][j]; // 11
		j++; // j=11
		cout << karte[i][j]; // 12
		j++; // j=12
		cout << karte[i][j]; // 13
		j++; // j=13
		cout << karte[i][j]; // 14
		j++; // j=14
		cout << karte[i][j]; // 15
		j++; // j=15
		cout << karte[i][j]; // 16
		j++; // j=16
		cout << karte[i][j]; // 17
		j++; // j=17
		cout << karte[i][j]; // 18
		j++; // j=18
		cout << karte[i][j]; // 19
		j++; // j=19
		cout << karte[i][j]; // 20
		j++; // j=20
		cout << karte[i][j] << endl; // 21
		i++;
	}
So sollte (glaub ich) es eigentlich funktionieren, tuts aber net-.-, beim kompilieren ist noch alles in Ordnung, doch wenn ich das Programm starte kommen nur lauter wirrer Zeichen und ein haufen Piep-Töne heraus.-.-(und mein Gefühl sagt mir das ist nicht gut...) Auch das Debuggen hat nichts geholfen...
Könnte mir einer den Fehler des Codes sagen oder mir sonst irgendwie dabei helfen? Das wäre nett.
Gruß meifer
 
Zuletzt bearbeitet:
Hast du denn irgendwelche Werte im Array gespeichert?
Code:
char karte[21][21];
erzeugt ein 2D-Array. Doch das Array wird nicht mit Werten gefüllt. Die Zeichen, die bei dir ausgegeben werden sind überreste, die in deinem Speicher waren.
Wenn du ein Array erzeugst, dann wird einfach Platz dafür im Speicher reserviert. Natürlich wird nur Platz, der vorher mal freigegeben wurde reserviert. Doch wenn Platz im Speicher freigegeben wird, wird der Inhalt nicht gelöscht. Das System merkt sich einfach wo freier Platz ist. (Das selbe geschieht übrigens auch auf der Harddisk)

Übrigens lässt sich dein Code einfacher schreiben:
Code:
for (int i=0; i<21; i++)
{
    for (int j; j<21; j++)
    {
        cout << karte[i][j];
        if (j ==21)
            cout << enl;
    }
}
Das macht natürlich nur Sinn, wenn du irgendwas im Array gespeichert hast.

Gruss LukeS
 
Hallo,

Werte vom Typ char werden standardmäßig als einzelnes Zeichen interpretiert und dementsprechend auf der Konsole ausgegeben. Wenn du den Zahlenwert ausgeben willst, könntest du den Wert zuerst in ein int casten:
Code:
cout << static_cast<int>(karte[i][j]);
Übrigens: warum durchläufst du die zweite Dimension „von Hand“ und nicht mit einer inneren Schleife?

Grüße,
Matthias
 
des wegen der schleife hab ich irgendwie net ganz genau gwusst wie ich des machen soll^^, aber der Array hat natürlich immer Werte bekommen und natürlich auch alles Buchstaben, das komische ist ja nur das wenn ich die variable i durch eine konstante Zahl ersetze, wird alles korrekt angezeigt, sobal ich allerdings wieder i benutze kommt wieder totaler schwachsinn raus.
gruß meifer
 
vielleicht könntest du deinen genauen Code posten.
Weil irgendwie kann ich mir nicht erklären, was falsch ist.

Gruss LukeS
 
Also der Code schaut ungefähr so aus:

Code:
#include <iostream>
using namespace std;

int main()
{
	char karte[21][21];
	char berg = 'A';
	char see = 'O';	
	char wald = 'T';
	char wiese = 'W';
	char stadt = 'X';
	karte[1][1] = see;
	karte[1][2] = berg;
	karte[1][3] = wald;
	karte[1][4] = wald;
	karte[1][5] = wiese;
	karte[1][6] = wiese;
	karte[1][7] = wiese;
	karte[1][8] = wiese;
	karte[1][9] = wald;
                // usw. den Rest davon will ich euch mal ersparen^^
	for (int i=0; i<21; i++)
	{
		for (int j=0; j<21; j++)
		{
			cout << karte[i][j];
			if (j ==21)
				cout << endl;
		}
	}
}
 
Ich hab den Fehler nach 2 Stunden suchen gefunden^^ Es Wurde ein Wert falsch dem Array zugewiesen, aber trotzdem für Hilfen oben.
gruß meifer
 
Freut mich, dass du den Fehler gefunden hast. In deinem geposteten Code konnte ich keine Fehler finden. (Habe den code jedoch nur durchgelesen und nicht zu compilieren versucht.
Übrigens: hast du schon mal einen Debugger benützt? Der hilft dir solche Fehler einfacher zu finden. Die Grundlagen zur Bedienung eines Debuggers sind ziemlich leicht (zumindest bei dem von VC++)

Gruss
 
Zurück