0

我正在尝试从文件中读取字符,但是当我使用文件结尾函数时,它循环的次数比文件中的字符数多 1 .. 但我不知道为什么?

#include <iostream>
#include <fstream>

int main()
{
    ifstream file;
    char ch1;
        file.open("c:\\Downloads\\test.txt" , ios::in);

    int i=0;
    while(!file.eof())
    {  i++;
        file>>ch1;
                    cout<<ch1<<endl;
          }
           cout <<i<<endl;
file.close();
return 0;
}

文件包含

[]

输出 :[ ] ] 3

4

2 回答 2

0

好吧,当您读取文件中的最后一个字符时file.eof()仍然是错误的,因为流还不知道它已经到达末尾。只有在您尝试读取已经不存在的字符后,才会将 eof 设置为 true。你可能应该这样做

char ch;

while(file >> ch)
{
      ... 
}
于 2013-04-06T16:53:04.543 回答
0

原因是因为您还没有到达文件末尾,并不意味着下一次读取会成功。因为您正在读取字符,所以只有在您实际尝试在最后一个字符之后读取时才会设置 EOF。

事实上,即使你从文件中读取字符串、整数或其他类似的东西,也会出现类似的问题。在许多文本文件的末尾是一个额外\n的,后面没有文本。所以当读到最后一行时,流中还有a\n但是没有设置EOF。然后,您继续阅读下一行,该行不存在您提取的任何内容,其内容与以前相同。这导致似乎是重复读数。

于 2013-04-06T16:53:09.303 回答