我刚刚在这个答案中发现了一条评论说iostream::eof在循环条件下使用"几乎肯定是错误的".我通常使用类似的东西while(cin>>n)- 我猜是隐式检查EOF,为什么检查eof显式使用while (!cin.eof())错误?
它与scanf("...",...)!=EOF在C中使用有何不同(我经常使用没有问题)?
以下C++代码使用ifstream对象从文本文件(每行有一个数字)读取整数,直到它达到EOF.为什么它读取最后一行的整数两次?如何解决这个问题?
码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream iFile("input.txt"); // input.txt has integers, one per line
while (!iFile.eof())
{
int x;
iFile >> x;
cerr << x << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
input.txt:
10
20
30
Run Code Online (Sandbox Code Playgroud)
输出:
10
20
30
30
Run Code Online (Sandbox Code Playgroud)
注意:我已跳过所有错误检查代码,以使代码段保持较小.在Windows(Visual C++),cygwin(gcc)和Linux(gcc)上可以看到上述行为.