我正在尝试从文件中读取字符,但是当我使用文件结束函数时,它比文件中的字符数循环超过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
答案 0 :(得分:1)
原因是因为你尚未点击文件末尾,并不意味着下一次阅读会成功。因为您正在阅读字符,所以只有在您真正尝试读取最后一个字符后才会设置EOF。
事实上,即使你从文件中读取字符串,整数或其他类似的东西,也存在类似的问题。在许多文本文件的末尾是一个额外的\n
,后面没有文字。因此,当读取最后一行时,流中仍有\n
但尚未设置EOF。然后你继续阅读下一行,它不是你正在提取的内容,留下与之前相同的内容。这导致看似重复阅读。
答案 1 :(得分:0)
好吧,当你读到文件中的最后一个字符file.eof()
仍然是假的,因为流还不知道它已经到了结尾。只有在您尝试读取已存在的字符后,才将eof设置为true。你可能应该这样做
char ch;
while(file >> ch)
{
...
}