【问题标题】:When do I stop reading from a file?我什么时候停止读取文件?
【发布时间】:2011-05-23 11:23:23
【问题描述】:

some_file.good() 是在读取文件的最后一个条目之后返回false,还是在尝试读取之后返回?也就是说,我应该写

while (input.good())
{
    getline(input, line);
    // ...process
}

getline(input, line);
while (input.good())
{
    // ...process
    getline(input, line);
}

?

【问题讨论】:

    标签: c++ stl flags ifstream eof


    【解决方案1】:

    正在尝试阅读更多内容...

    你可以试试:

    while(getline(input, line))
    {
    // do stuff with line
    }
    

    应该添加,该流实现operator!,它检查您通常会检查的标志。 getline 的返回是输入流,但由于操作符的原因,检查了标志。

    【讨论】:

    • 啊,不知道getline 将输入流回显给调用者。在这种情况下,为了便于阅读,我想我会选择while (getline(input, line).good())
    • 实际上,它非常地道,因此您不需要它来提高可读性。 while (stream >> item) 也是惯用的(但不适用于开箱即用的行;))
    【解决方案2】:

    如前所述,当没有更多行时,getline 返回零。如果设置了 EOF 标志(即在流上到达文件末尾),方法 eof() 也会返回 true:

    if(input.eof())
    {
    // end of file
    }
    

    【讨论】:

    • getline 永远不会返回零。它返回输入流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2018-02-17
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2019-08-29
    • 2018-12-02
    相关资源
    最近更新 更多