【发布时间】:2010-12-04 10:04:10
【问题描述】:
为什么当这段代码完成时我得到一个额外的迭代(额外的行打印)? EOF 是否需要额外的换行符?我宁愿不必添加额外/特殊字符来标记 EOF。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream infile("dictionary.txt"); // one word per line
string text;
while(infile){
infile >> text;
cout << text << endl;
}
infile.close();
return 0;
}
【问题讨论】:
-
你能确认“dictionary.txt”最后没有换行吗?因为您的代码似乎可以直接读入、写出。
-
@nr81:这是读取文件的标准反模式。因为在读取(使用运算符>>)之后没有测试 eof,所以最后一行将被打印两次。有关读取文件的正确模式,请参阅下面的回复。
标签: c++ file-io while-loop