gpt4 book ai didi

c++ - ifstream.eof() 在 C++ 中未评估为真

转载 作者:行者123 更新时间:2023-11-30 03:58:46 24 4
gpt4 key购买 nike

<分区>

我对理解 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' 之后的隐式换行符?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com