c++ - C++ 中没有 `while (!my_ifstream.eof()) { getline(my_ifstream, line) }`?

标签 c++ ifstream getline

关于 this website ,有人写道:

while (! myfile.eof() )
{
   getline (myfile,line);
   cout << line << endl;
}

这是错误的,请仔细阅读 eof() 的文档 成员函数。正确的代码是这样的:

while( getline( myfile, line))
    cout << line << endl;

这是为什么?

最佳答案

有两个主要原因。 @Etienne 指出了一个:除了到达文件末尾之外的其他原因,读取可能会失败,在这种情况下,您的第一个版本将进入无限循环。

然而,即使没有其他故障,第一个也无法正常工作。 eof() 不会被设置,直到 after 由于到达文件末尾而导致读取失败。这意味着第一个循环将执行您并不真正想要的额外迭代。在这种情况下,最终只会在文件末尾添加一个额外的空白(空)行。根据您使用的是什么,这可能重要也可能不重要。根据您用来读取数据的内容,在输出中看到最后一行重复也是很常见的。

关于c++ - C++ 中没有 `while (!my_ifstream.eof()) { getline(my_ifstream, line) }`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623999/

相关文章:

c++ - 如果它的 shared_ptr 被删除,原始指针会发生什么?

c++ - operator<< 无法输出 std::endl -- 修复?

c++ - 与解析相关的 token 到底是什么

c++ - 在 C++ 中,如果没有换行符,则不会打印字符串

c++ - getline(cin, answer5);在我的程序结束时不工作

c++ - String Vector 程序在输入前退出

c++ - 我怎样才能更快地实现 Project Euler 25,这样我才能真正计算出答案?

c++ - 在短时傅里叶变换中获取特定频率的值

C++使用fstream查找特定数据

c++ - 在二进制文件上使用 Getline