C++ 为什么 getline() 会结束 while 循环
C++ Why does getline() end the while loop?
我刚刚开始使用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
。这会导致Tfile
的operator bool
计算结果为 false,然后终止循环。
请参阅 iostate、getline 的返回规范和 ios 运算符 bool。
请注意,由于 getline
返回对你传递它的流的引用,因此此循环的惯用形式是:
ifstream Tfile("player.txt");
string line;
while (getline(Tfile, line)) {
cout << line << endl;
}
相关文章:
- 为什么这个 while 循环在下面的代码中没有结束?
- 为什么在使用不相关的宏时会阻止 while 循环结束?
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- while 循环 C++ 结束,但不继续到其余语句
- 当满足条件时,While循环未结束
- 为什么我的 while 语句没有结束?
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 为什么 while(int) 在 int = 0 时结束?
- 根据特定的用户输入量结束 while 循环
- 使用假值结束 do while 循环C++
- C 为什么在满足布尔条件后,我的DO-while循环就无法结束
- C++ 为什么 getline() 会结束 while 循环
- 永无止境的 while-循环C++即在输入字符串 == no 时结束
- C++使用cin.get来获取一个字符,但在遇到EOF时不会结束while循环
- 如何让程序知道当我使用 while(cin>> 时文件结束
- 如何结束我的while循环
- 在结束取决于布尔值的 do/while 循环时遇到问题 - C++
- 如何结束while循环
- 结束while循环进行字符替换
- 如何在C++中使用bool sentinel值来结束while循环