<分区>
我对理解 C++ 中的文件输入流有点费劲。我有一个代码片段如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream in("x.txt");
bool done = false;
do {
string input = "";
getline(in,input);
int x1;
int x2;
in >> x1;
in >> x2;
cout << input << " " << x1 << " " << x2 << endl;
in.ignore();
if(in.eof()) {
done = true;
cout << "reached eof" << endl;
}
} while(!done);
return 0;
}
文件x.txt内容如下
task1
12
1313
task2
13
1414
[blank line]
请注意输入文件末尾有意包含空行。这意味着输入“1414”后按下了回车键。
我的预期输出是
task1 12 1313
task2 13 1414
reached eof
但实际上,输出是
task1 12 1313
task2 13 1414
13 1414
reached eof
我知道在输入文件中按回车键会产生一个隐含的换行符,在使用像getline(ifstream, string)
这样的语句之前,我们应该ignore()
下一个换行符。话虽这么说,为什么 ifstream.eof() 没有评估为真,即使我 ignore()
'1414' 之后的隐式换行符?