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

C++ Why does getline() end the while loop?

本文关键字:结束 while 循环 为什么 getline C++      更新时间:2023-10-16

我刚刚开始使用C++中的文件,我对文件对象和getline()的工作原理仍然陌生。

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

我唯一能特别想到的是,当 getline() 执行其操作并通过每一行工作时,它会主动更改 while(Tfile) 的状态,并且当到达文件末尾时,而 while(Tfile) 不再为 true,这导致循环终止,但我不太确定。

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

getline设置Tfile到达文件末尾时的eofbit。这会导致Tfileoperator bool计算结果为 false,然后终止循环。

请参阅 iostate、getline 的返回规范和 ios 运算符 bool。

请注意,由于 getline 返回对你传递它的流的引用,因此此循环的惯用形式是:

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