2016-04-19 5 views
0

Ich arbeite an einem Schulprojekt, bei dem ein vorgefertigtes 25x25-Labyrinth aus einer .txt-Datei in ein zweidimensionales Array eingegeben und dann auf die Konsole gedruckt und ein Charakter durch das Labyrinth bewegt wird. Das Hauptproblem, das ich habe, ist das Verschieben der Zeichen in das Array. Ich fühle mich, als wäre ich nah dran, aber der Code, den ich habe, führt zum Absturz des Programms.Brauchen Sie Hilfe beim Zuweisen von TXT-Zeichen in ein 2-D-Array. C++

Hier ist die Schleife ich verwende die Zeichen in dem Feld zu bewegen:

int col=0; 
ifstream inFile; 
inFile.open("maze.txt"); 
char temp = inFile.get(); 
while(!inFile.eof()) 
{ 
    for(int row=0; row<25; row++) 
    { 
     while(temp != '\n') 
     { 
      boundary[row][col] = temp; 
      col++; 
      temp=inFile.get(); 
     } 
     temp=inFile.get(); 
    } 
} 
inFile.close(); 

Wesentlichen der Punkt ist, beide Räume und Block-Zeichen in ein 25x25 Zeichenfeld zu bewegen, indem in jeweils alle Zeichen unter Zeile in die gleiche Zeile des Arrays, bis es ein neues Zeilenzeichen erreicht, dann sollte es zum nächsten Zeichen in der nächsten Zeile wechseln und die While-Schleife erneut starten.

Es kompiliert gut, aber das Programm stürzt ab, bevor es zu anderem Code wechseln kann. Wenn Sie wissen, wie Sie es beheben können, ohne das Format drastisch zu ändern, würde ich es begrüßen, weil dies nur ein kleiner Teil ist, aber ich bin offen dafür, bei Null anzufangen, wenn es nötig ist.

+1

[ 'while (! InFile.eof())'] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

+1

Sie können damit beginnen, dass Ihr Programm sicherstellt, dass die Datei erfolgreich geöffnet wurde. –

+0

Wie wird 'Grenze' deklariert? wo stürzt es ab und was ist der Stack-Trace? Plus, nach jedem Aufruf von EOF nach get() suchen, nicht nur in einer äußeren Schleife, da dies bedeuten würde, "lade ein anderes Labyrinth", wenn in der Eingabedatei irgendwelche überzähligen Zeichen vorhanden sind, was zu einem Überlauf des "col" führt Index in Ihrer aktuellen Schleifenkonfiguration. – dlatikay

Antwort

3

col auf Null nach jeder Zeile zurücksetzen (vor oder nach der while(temp != '\n') Schleife).

+0

Das war das Problem. Ich fühle mich wie ein Idiot, wenn ich das vermisse. Danke eine Tonne –

+0

Das war ** ein ** Problem. Sie sollten einige der Anmerkungen in den Kommentaren unter Ihrer Frage lösen. Das 'while eof' wird Sie früher oder später erwischen. – user4581301

+0

@ user4581301 Ich habe jedem eine if-Anweisung hinzugefügt, um das zu verhindern. –

0

Ihre Eingabe könnte mehr Spalten in der Textdatei haben als die Anzahl der Spalten, die Sie in Ihrem Array definiert haben. Der bessere Weg wäre, die Größe des Arrays in der Textdatei zu definieren und dann mithilfe von malloc zuzuweisen. Wenn Sie jedoch wissen, dass sich die genaue Größe von Spalte und Zeile nicht ändert, können Sie eine statisch definierte Array-Größe verwenden. Sie brauchen auch keine for-Schleife.

#define max_col = 25; 
#define max_row = 25; 

char boundary[max_row][max_col]; 

int col=0; 
int row=0; 

ifstream inFile; 
inFile.open("maze.txt"); 
char temp = inFile.get(); 

while(!inFile.eof()) 
{ 

    boundary[row][col] = temp; 
    if(++col > max_col || temp == '\n') { 
     col = 0; 
     if(++row > max_row) return -1; // depends how you want to handle 
    } 

    temp=inFile.get(); 
} 

inFile.close(); 
Verwandte Themen