函数文件结束循环额外循环? C ++

时间:2013-04-06 16:50:49

标签: c++

我正在尝试从文件中读取字符,但是当我使用文件结束函数时,它比文件中的字符数循环超过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

2 个答案:

答案 0 :(得分:1)

原因是因为你尚未点击文件末尾,并不意味着下一次阅读会成功。因为您正在阅读字符,所以只有在您真正尝试读取最后一个字符后才会设置EOF。

事实上,即使你从文件中读取字符串,整数或其他类似的东西,也存在类似的问题。在许多文本文件的末尾是一个额外的\n,后面没有文字。因此,当读取最后一行时,流中仍有\n但尚未设置EOF。然后你继续阅读下一行,它不是你正在提取的内容,留下与之前相同的内容。这导致看似重复阅读。

答案 1 :(得分:0)

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

char ch;

while(file >> ch)
{
      ... 
}