2012-03-26 190 views
0

我試圖學習一些關於C++的知識,並遇到了一些麻煩。從C++中讀取文件

我有以下代碼:

char board[5][5]; 
ifstream myReadFile; 
myReadFile.open("c:/test.txt"); 

for(int i=0; i<5; i++)  
{ 
    for(int j=0; j<5; j++) 
    { 
     while (myReadFile.good())  
     { 
      board[i][j] = myReadFile.get();     
      cout << board[i][j]; 
     } 
    } 
} 
myReadFile.close(); 

for(int x=0; x<5; x++) 
{ 
    for(int y=0; y<5; y++) 
    { 

     cout << board[x][y]; 
    } 
    cout << endl; 
} 

現在,我期待第一個循環來讀取TXT文件中的字符和工作的,所以是的! 但第二個循環,我期待打印相同的字符回cout。然而,這是不是這樣的,所以我添加了一行

cout << board[i][j] 

到第一循環,看看他們在那裏正確加載。 這是結果我得到

results http://tbmilena.dk/test.png

有人可以解釋爲什麼第二次循環不打印一樣的第一。

+0

你能發佈text.txt文件內容嗎? – logoff 2012-03-26 15:24:52

回答

4

從文件中讀取字符後立即替換板[i] [j]。把while循環作爲最外層循環。

while (myReadFile.good())  
     { 
      board[i][j] = myReadFile.get();     
      cout << board[i][j]; 
     } 

在此,雖然我&Ĵ保持相同連續更換板[i] [j]與新的字符。

+0

另一個問題是'myReadFile.good()'測試* previous * read是否有效,而不是* next *'get()'是否可以工作。 – 2012-03-26 15:48:40

+0

good()如果沒有設置(errorbit,failbit和eofbit),則返回true。所以它可以用來像「讀到eof」一樣。你的陳述「如果以前的閱讀工作」只考慮失敗位數。但好()比這更好。 – 2012-03-26 15:56:21

+0

不,它不會告訴下一個'get()'是否會到達eof。一次讀取一個字符時,您不知道是否存在下一個字符。 – 2012-03-26 15:59:22