C ++为什么getline()结束while循环?

时间:2019-01-22 21:57:36

标签: c++ getline

我刚刚开始使用C ++处理文件,但是我仍然对文件对象和getline()的工作方式还很陌生。

所以我有点理解getline()函数及其工作原理,并且在布尔上下文中使用它时会通过void *返回一个布尔值,但是我不明白的是为什么在代码中while循环不起作用'导致无限循环或错误,因为没有任何会终止循环的语句(例如break)。 任何帮助将不胜感激,谢谢!

我唯一想到的就是getline()何时执行其操作并遍历每一行,它会主动更改while(Tfile)的状态以及何时到达文件末尾while(Tfile)不再是真的,这会导致循环终止,但我不太确定。

ifstream Tfile("player.txt");
string line;
while(Tfile){
        if (getline(Tfile, line))
    cout << line << endl;   
}

1 个答案:

答案 0 :(得分:6)

getline设置eofbit的{​​{1}}到达文件末尾。这会导致Tfile中的operator bool评估为false,然后终止循环。

请参见iostategetline's return specificationios operator bool

请注意,由于Tfile返回了对您传递的流的引用,因此此循环的惯用格式为:

getline