我编写了以下代码来输入文件中的数字,但是最后一个数字被打印了两次,这让我感到困惑.什么是可能的答案.提前致谢.
码:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int x;
ifstream f;
f.open("note");
while(!f.eof()){
f>>x;
cout<<x<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
1
2
3
4
5
5
Run Code Online (Sandbox Code Playgroud)
文件说明的内容是:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
让我试着比以前的答案更有启发性.f>>x读取一个整数,以便扫描输入数字.它看到'5'然后'\n',这不是一个数字,所以它在'5'之后停止并将x设置为5.它还没有遇到eof,你的循环再次执行,然后f>>x读取'\n '然后当它击中eof时失败,保持x不变,然后再次打印5.因此,您需要在阅读后和打印前进行测试.最简单(也是首选)的方法是
while(f>>x)
cout<<x<<endl;
Run Code Online (Sandbox Code Playgroud)
你不应该这样做
do{
f>>x;
cout<<x<<endl;
}while(!f.eof());
Run Code Online (Sandbox Code Playgroud)
(在读取之后和打印之前不进行测试)因为如果输入文件不包含任何数字x会导致未定义的行为 - 是单元化的并且您将打印垃圾(或者可能炸毁世界,但可能不会).