从C++中读取文件

问题描述:

我试图学习一些关于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

从文件中读取字符后立即替换板[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