在 this website 上,有人写道:
这是错误的,请仔细阅读 eof() 的文档
成员函数。正确的代码是这样的:
while( getline( myfile, line))
cout << line << endl;
为什么是这样?
最佳答案
有两个主要原因。 @Etienne 指出了一个:除了到达文件末尾之外,读取可能由于某种原因而失败,在这种情况下,您的第一个版本将进入无限循环。
然而,即使没有其他故障,第一个也无法正常工作。 eof()
不会在读取尝试失败后设置,因为已到达文件末尾。这意味着第一个循环将执行一个您并不真正想要的额外迭代。在这种情况下,最终只会在文件末尾添加一个额外的空白(空)行。根据您正在使用的内容,这可能重要也可能无关紧要。根据您用于读取数据的内容,在输出中看到最后一行重复也是很常见的。
关于c++ - C++ 中没有 `while (!my_ifstream.eof()) { getline(my_ifstream, line) }`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7623999/