【问题标题】:No `while (!my_ifstream.eof()) { getline(my_ifstream, line) }` in C++?在 C++ 中没有 `while (!my_ifstream.eof()) { getline(my_ifstream, line) }`?
【发布时间】:2011-11-29 06:06:43
【问题描述】:

this website,有人写道:

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

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

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

这是为什么?

【问题讨论】:

    标签: c++ ifstream getline


    【解决方案1】:

    有两个主要原因。 @Etienne 指出了一个:读取可能由于某种原因而失败,而不是到达文件末尾,在这种情况下,您的第一个版本将进入无限循环。

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

    【讨论】:

      【解决方案2】:

      流操作(例如读取)可能因多种原因而失败。 eof() 只测试其中之一。要全部测试它们,只需使用流的void *conversion 运算符。这就是在第二个 sn-p 中所做的。

      【讨论】:

        猜你喜欢
        • 2013-03-25
        • 1970-01-01
        • 2011-09-08
        • 2019-11-13
        • 2014-11-22
        • 2019-05-08
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多