2016-04-21 98 views
-4

我目前正試圖將文件讀取到一個二位數組中,每次一位數字。我正在檢索數據的文件是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 ++)'此循環將運行零次。也許你的意思是'for(int j = 0; j <100; j ++)' – user463035818

+1

如果你現在學會使用一個調試器,你會學到如何比這裏複製/粘貼/格式化快,你會在這個過程中學到一些東西。 –

+0

不要編輯你的問題來解決你原來要求的問題。這使得它對未來的反應無用,並使已經給出答案的無效。 – user463035818

回答

2

您的問題是,你是在錯誤的for循環評估變量j

您有:

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

然而,這種循環將不會執行爲j0開始出來,然後進行檢查,看是否0>100。正確的遍歷這個迭代是:

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

相關問題