C++ 为什么 getline() 结束 while 循环?
C++ Why does getline() end the while loop?
我刚刚开始在 C++ 中处理文件,但我对文件对象和 getline() 的工作方式还是陌生的。
所以我有点理解 getline() 函数及其工作原理,并且当在布尔上下文中使用时,它 returns 是一个通过 void* 的布尔值,但我不明白的是为什么在编写 while 循环代码不会导致无限循环或错误,因为没有任何语句可以终止循环,例如 break。
如有任何帮助,我们将不胜感激!
我唯一能特别想到的是,当 getline() 执行其操作并通过每一行工作时,它会主动更改 while(Tfile) 的状态以及到达文件末尾时 while( Tfile) 不再正确,这会导致循环终止,但我不太确定。
ifstream Tfile("player.txt");
string line;
while(Tfile){
if (getline(Tfile, line))
cout << line << endl;
}
getline
在到达文件末尾时设置 Tfile
的 eofbit
。这会导致 Tfile
的 operator bool
评估为 false,然后终止循环。
参见 iostate, getline's return specification, and ios operator bool。
请注意,由于 getline
returns 对您传递给它的流的引用,因此此循环的惯用形式是:
ifstream Tfile("player.txt");
string line;
while(getline(Tfile, line)) {
cout << line << endl;
}
我刚刚开始在 C++ 中处理文件,但我对文件对象和 getline() 的工作方式还是陌生的。
所以我有点理解 getline() 函数及其工作原理,并且当在布尔上下文中使用时,它 returns 是一个通过 void* 的布尔值,但我不明白的是为什么在编写 while 循环代码不会导致无限循环或错误,因为没有任何语句可以终止循环,例如 break。 如有任何帮助,我们将不胜感激!
我唯一能特别想到的是,当 getline() 执行其操作并通过每一行工作时,它会主动更改 while(Tfile) 的状态以及到达文件末尾时 while( Tfile) 不再正确,这会导致循环终止,但我不太确定。
ifstream Tfile("player.txt");
string line;
while(Tfile){
if (getline(Tfile, line))
cout << line << endl;
}
getline
在到达文件末尾时设置 Tfile
的 eofbit
。这会导致 Tfile
的 operator bool
评估为 false,然后终止循环。
参见 iostate, getline's return specification, and ios operator bool。
请注意,由于 getline
returns 对您传递给它的流的引用,因此此循环的惯用形式是:
ifstream Tfile("player.txt");
string line;
while(getline(Tfile, line)) {
cout << line << endl;
}