我在理解C++中的文件輸入流時感到很掙扎。我有一個代碼片段如下:ifstream.eof()在C++中沒有評估爲true
#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
我明白,按enter內的輸入文件生成一個隱換行符,並使用像一個語句之前getline(ifstream, string)
我們應該ignore()
那下一個換行符。這就是說,爲什麼ifstream.eof()沒有評估爲真,即使在'1414'之後的隱含換行符是ignore()
?
'而(在X1 >> >> X2)' – Borgleader 2014-12-03 15:31:33
你爲什麼不測試的返回值'getline'? 'in >> x1'和'in >> x2'同樣的問題?如果您有問題,我/ O **檢查I/O工作** – 2014-12-03 15:32:29
這基本上是http://stackoverflow.com/q/5605125/981959具有不同(但仍然是錯誤的)環 – 2014-12-03 15:34:45