2016-04-19 8 views
0

私は、.txtファイルからあらかじめ設計された25x25の迷路を2次元配列に入力し、それをコンソールに印刷し、迷路を通してキャラクターを移動させるという学校プロジェクトに取り組んでいます。主な問題は、文字を配列に移動することです。私は近くにいるように感じるが、私が持っているコードはプログラムがクラッシュする原因になる。2次元配列に.txt文字を割り当てる手助けが必要です。 C++

は、ここで私は配列に文字を移動するために使用していたループです:基本的に

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(); 

、ポイントはそれぞれのすべての文字を取ることによって、25×25文字配列にスペースとブロック文字の両方を移動することです新しい行の文字に達するまで配列の同じ行に挿入し、次の行の次の文字に移動し、whileループを再び開始する必要があります。

コンパイルは正常ですが、他のコードに移動する前にプログラムがクラッシュします。 形式を大幅に変更せずに修正する方法が分かっていれば、これはほんの一部に過ぎないので分かりますが、必要な場合は最初から始めています。

+1

[ 'しばらく(!inFile.eof())'](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

+1

あなたは、プログラムがファイルを開くことに成功したことを確認することから始められます。 –

+0

'境界 'はどのように宣言され/割り当てられていますか?どこがクラッシュし、スタックトレースは何ですか?また、外部のループだけでなく、get()を呼び出すたびにEOFをチェックすると、入力ファイルに余分な文字がある場合には「別の迷路をロードする」ことを意味し、 'col'のオーバーフローを引き起こします。あなたの現在のループ構成のインデックス。 – dlatikay

答えて

3

各行の後に(while(temp != '\n')ループの前後に)colをゼロにリセットします。

+0

それは問題でした。私はそれを逃したばかげているような気がする。ありがとうございました –

+0

これは** a **の問題でした。あなたはあなたの質問の下にあるコメントの中のいくつかの解答を調べるべきです。 "while eof"は遅かれ早かれあなたをつかまえます。 – user4581301

+0

@ user4581301これを防ぐためにif文をそれぞれに追加しました。 –

0

あなたの入力には、配列で定義した列の数より多くの列がテキストファイルに含まれることがあります。より良い方法は、テキストファイル内の配列のサイズを定義し、mallocを使用して割り当てますが、列と行の正確なサイズが変わらないことがわかっている場合は、静的に定義された配列サイズを使用できます。また、forループは必要ありません。

#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(); 
関連する問題