Problem beim füllen und lesen eines 2d Arrays
-
Hallo,
ich soll aus einem Textfile eine "Welt" laden, die aus "#" für Haus und " " für Strasse besteht und diese Zeichen dann in einem 2d-Array speichern, also als Koordinaten. Ich hab mir das nun so überlegt, dass ich die Datei Zeichenweise lese und dann in dem Array ablege. Leider gibt es da ein Problem, dass nur die erste Zeile korrekt gespeichert wird und ich den Fehler einfach nicht finde.
Es handelt sich dabei um eine Welt, die 40 Parzellen breit und 33 Parzellen hoch ist.ifstream file; string fileName = "test.txt"; file.open(fileName.c_str()); if(file) { while(!file.eof() && i < 33) { char buffer; file.get(buffer); if(buffer == '#') { parcels[i][y] = haus; } else { parcels[i][y] = strasse; } y++; if(y == 40) { i++; y=0; } } file.close(); } else { cout << "Datei Fehler!"; }Ab der zweiten Zeile ist es irgendwie verschoben. Gibt es vielleicht eine einfachere Methode? Zum Beispiel über einen Vektor oder so?
-
Ich persönlich würde da einfach einmal alle Zeichen einlesen (solltest dann einfach schauen, dass keine Leerzeichen als Wert gelten) und dann ganz einfach per
std::ifstream input; ... for(...) for (...) input >> char; //und in container speichern. (am besten Wohl ein std::vector<std::vector<char>>)
-
Ich glaube, du musst noch das Newline-Zeichen überspringen, wenn du i hochzählst. Außerdem sieht es so aus, dass du 41 Zeichen pro Zeile liest, weil y bei 0 anfängt und bei 40 aufhört.
-
Danke für die antworten.
Naja, das Array oder der Vektor sollen ja nicht vom Datentyp Char, sondern einem eigenen Datentyp sein, da wir später noch andere Objekt in die Welt einfügen werden.
Also wenn ich mir i und y ausgeben lasse, dann zählt er richtig

y wird ja sofort wenn es auf 40 ist wieder auf 0 gesetzt.wie überspringe ich denn dieses newline zeichen?
-
Müsste mit .ignore() gehen.
-
if(buffer == '\n') { i++; y=0; }Das war die Lösung des Problems
