2016-04-21 31 views
-4

現在、ファイルを2次元配列に1桁ずつ読み込もうとしています。データを取得しているファイルは、maze.txtです(コードの下に示されています)。現在の状態のプログラムはコンパイルされますが、プログラムが実行されると何も印刷されず永遠に実行されます。私はエラーが最初のforループに関連付けられていると仮定しています。ファイルを読み込み、配列に入力しようとしています

This is the output of Chris's solution

//Input: A txt file containing a 10 x 10 maze of 0s and 1s 
//Output: A route from the top left to the bottom right passing through only 0s 
#include <fstream> 
#include <iostream> 
using namespace std; 
const int LENGTH = 10; 
const int WIDTH = 10; 


int main() 
{ char mazeArray[LENGTH][WIDTH]; 
    int counter = 0; 
    fstream mazeFile; 
    mazeFile.open("maze.txt"); 
    if(mazeFile.fail()) 
    { 
    cout << "File not found." << endl; 
    return 0; 
    } 
do 
    { 
    cin >> mazeArray[counter]; 
    counter++; 
    } while(mazeFile.good() && counter < LENGTH * WIDTH); 

for(int j = 0; j > 100; j++) 
    { 
    cout << mazeArray[j] << endl; 
    } 


    return 0; 
} 

Maze.txt

0 1 0 0 1 0 0 1 0 0 
0 0 1 1 1 0 0 0 0 1 
1 0 1 0 1 0 1 0 1 0 
0 0 0 0 1 0 1 0 1 0 
0 0 0 1 0 0 1 0 1 0 
1 1 0 0 0 0 1 0 1 0 
1 1 1 1 1 0 0 0 1 0 
0 0 0 0 0 1 0 0 0 0 
1 1 1 1 1 1 0 1 0 0 
0 0 0 0 0 0 0 1 1 0 
+1

'のための(int型J = 0; j>は100あり、j ++)'このループはゼロ回実行されます。たぶん、あなたが '(int j = 0; j <100; j ++)'を意味するのでしょうか – user463035818

+1

ここでデバッガを使う方法を学ぶなら、ここでコピー/貼り付け/書式設定できるよりも素早くこのようなことを理解する方法を学びますその過程でいくつかのことを学びます。 –

+0

あなたが元々求めていた問題を解決するために質問を編集しないでください。これは、将来の読書には役に立たず、既に回答を無効にしています。 – user463035818

答えて

2

あなたの問題は、あなたが間違ってあなたのforループで変数jを評価しているということです。

は、あなたが持っている:j0から始まり、その後、0>100かどうかを確認するためにチェックされているよう

for(int j = 0; j > 100; j++) 
    { 
    cout << mazeArray[j] << endl; 
    } 

をしかし、このループが実行されることはありません。これを反復処理するための正しいループは次のようになります。

for(int j = 0; j < LENGTH; j++) 
for(int i = 0; i < WIDTH; i++) 
    { 
    cout << mazeArray[j][i] << endl; 
    } 

あなたの第二の問題は、あなたがCINを使用して、ファイルストリームmazeFileを読み取ろうとしているということです。

cin >> mazeArray[counter]; 

:あなたが行を置き換える必要があり

mazeFile >> mazeArray[counter]; 

これは、それが無限に 'を実行させるのではなく、それは標準入力からの入力を待つ原因とされていません。 (端子を介して入力されたほとんどのテキスト。)

固定のコードサンプルは次のとおりです。

#include <fstream> 
#include <iostream> 
using namespace std; 
const int LENGTH = 10; 
const int WIDTH = 10; 


int main() 
{ int mazeArray[LENGTH][WIDTH]; 
    int counter = 0; 
    fstream mazeFile; 
    mazeFile.open("maze.txt"); 
    if(mazeFile.fail()) 
    { 
    cout << "File not found." << endl; 
    return 0; 
    } 
do 
    { 
     // Now accessing the array as a 2d array to conform to best practices. 
    mazeFile >> mazeArray[counter/LENGTH][counter%WIDTH]; 
    counter++; 
    } while(mazeFile.good() && counter < LENGTH * WIDTH); 

for(int j = 0; j < LENGTH; j++) 
for(int i = 0; i < WIDTH; i++) 
    { 
    cout << mazeArray[j][i] << endl; 
    } 


    return 0; 
} 
+0

これは、プログラムがOPによって報告されたように永久に実行される理由を説明していません – user463035818

+0

@ tobi303 OPは 'std :: cin'からデータを読み込んでいました。最初は意図的だったと仮定していましたが、ファイルストリームを使ってデータを読み取る方法を反映する質問が更新されました。 –

+0

はい、私は実際に 'cin'を見落としました。しかし、明示的に言及して、プログラムが実際には永遠に実行されていないことを明確にして、入力を待っている方が良いと思います。 – user463035818

関連する問題