Problem mit Dateien und Array
-
char filename[8]="map.txt"; fstream in(filename); if (!in) // wenn Fehler beim öffnen { cout << "Fehler beim öffnen der Datei " << filename; system("PAUSE"); exit(1); } int Map[9][9]; int i,j; for (i=0; i<10; i++) { for (j=0; j<10; j++) { int temp; temp=in.get(); Map[i][j]=temp; } } in.close();
Nachdem ich das zu meinem Programm hinzugefügt habe, gibt es überhaupt niochts mehr aus.
-
dein array ist nur 9 werte gross (0 bis
in der schleife gehtst du aber von 0 bis 9.
-
schonmal gedebugged? Wo das prog denn beendet
-
du hast in deiner for schleife einen IndexOutOfRange.
map[9][9] geht jeweils pro Klammer von 0-8, nicht von 0-10.
dann:
wie sieht die datei aus? Musst du sie evtl. vorher noch entsprechend aufbereiten(oder aber in jeder zeile steht eine map position).
-
#include <iostream> #include "conio.h" #include <stdlib.h> #include "class.h" #include <fstream> using namespace std; void gotoxy(int x,int y) { COORD cur={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur); } int main() { cPlayer P1; char filename[8]="map.txt"; fstream in(filename); if (!in) // wenn Fehler beim öffnen { cout << "Fehler beim öffnen der Datei " << filename; system("PAUSE"); exit(1); } int Map[10][10]; int i,j; for (i=0; i<10; i++) { for (j=0; j<10; j++) { int temp; temp=in.get(); Map[i][j]=temp; } } in.close(); /* ++++++++++++++++++++++++++++++++++++++++++++++++++ */ for ( int i=0; i<10; i++) { for ( int j=0; j<10; j++ ) { if (Map[i][j]==1) { gotoxy((35+j),(15+i)); cout << "X"; } if (Map[i][j]==4) // Ziel? { gotoxy((35+j),(15+i)); cout << "Z"; } if (Map[i][j]==3) //Start?? { gotoxy((35+j),(15+i)); cout << "O"; P1.x=(35+j); P1.y=(15+i); } } }// for Spielfeld zeichnen // Spielrahmen 34/14-46/14, 34/26-46/14 for (int i=34; i<47; i++) { gotoxy(i,14); cout << "-"; }; for (int i=34; i<47; i++) { gotoxy(i,25); cout << "-"; }; for (int i=14; i<26; i++) { gotoxy(34, i); cout <<"|"; } for (int i=14; i<26; i++) { gotoxy(45, i); cout <<"|"; } P1.update=0; do { P1.Draw(); P1.Eventmanager(); } while(1); system("PAUSE"); return 0; }
in der Textdatei stehen pro Zeilen 10Zahlen hintereinander. Also die 3teZahl in der 2ten Zeile soll in Map[1][2] .
Aber ich hab jetzt das Problem dass keine X, O oder Z ausgegeben werden. Also wird wohl das Array net richtig gefüttert. ( bei manueller zuweisung des Arrays klappte es also
Map[0][0]=1 ...
-
lass dir mal die zahlen ausgeben (cout << temp; ) wenn er die zeichen aus der datei einliest
in der Datei steht besimmt so was:
12457632 4894383 ...
Wenn du das ausgeben lässt, dann siehste aber bestimmt nciht die zahlen. Die Zahlen sind in ASCI-Form gespeichert. Du musst von jeder Zahl noch den ASCII-Wert für '1' abziehen, dann müsste es klappen
-
Deine Idee wegen den ASCII Werten war richtig.
Nun hab ich aber das Problem, dass ich alle Zahlen in der Datei hintereinander machen muss.
Wie kann ich den beim Lesen ner Datei in die nächste Zeilen springen und prüfen ob die Zeile zuende ist?
-
also, ifstream::getline ließt immer eine zeile aus der datei aus, damit ginge es, oder du testest vor dem ins array übernehem, ob das gelesene zeichen ASCII-Wert 13 (Zeilenumbruch) hat. Dann musst du nen neues Zeichen einlesen