我对文件结尾感到很困惑。假设我正在运行无限循环。在这个循环中,我将一个整数作为输入,然后处理它,直到我找到一个文件结束。但是,我是否检查输入是否为文件结尾。我该如何打破循环?
我使用Windows,因此对于EOF,我输入了CTRL + Z。
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
int n;
while(true)
{
cin >> n;
if(n==EOF)break;
cout << n << endl;
}
return 0;
}
当我运行此代码并输入CTRL + z时,它只打印我给出的最后一个输入,无休止地。
答案 0 :(得分:6)
1)这不是你检查文件结尾的方法。您在哪里读到operator>>
将返回EOF值?
查看您是否尝试阅读过去的文件结尾的正确方法是if(cin.eof())
。但是,不要那样做,因为:
2)你不应该检查文件结尾。相反,你应该检查“最后一次输入操作是否正常工作?”
像这样:
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
int n;
while(cin >> n)
{
cout << n << endl;
}
return 0;
}
<小时/> 参考:Reading from text file until EOF repeats last line