我刚刚开始使用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;
}
答案 0 :(得分:6)
getline
设置eofbit
的{{1}}到达文件末尾。这会导致Tfile
中的operator bool
评估为false,然后终止循环。
请参见iostate,getline's return specification和ios operator bool。
请注意,由于Tfile
返回了对您传递的流的引用,因此此循环的惯用格式为:
getline