理解 ifstream 的 eof() 函数
ifstream 类的 eof() 函数在 C 中的文件输入操作中起着至关重要的作用。然而,它的行为有时可能令人费解,特别是与 get() 函数相关。
考虑提供的示例:
#include <iostream> #include <fstream> int main() { std::fstream inf( "ex.txt", std::ios::in ); while( !inf.eof() ) { std::cout << inf.get() << "\n"; } inf.close(); inf.clear(); inf.open( "ex.txt", std::ios::in ); char c; while( inf >> c ) { std::cout << c << "\n"; } return 0; }
当输入文件“ex.txt”包含“abc”,第一个 while 循环在终止前读取四个字符。这是因为 eof() 仅在尝试读取文件末尾之后才设置 EOF 标志。第一个循环逐字符读取,直到读取失败,设置 EOF 标志。然而,get() 返回 -1 表示文件结束,不考虑 EOF 标志。
第二个循环,使用 >>>操作员表现出正确的行为。 >>操作符尝试读取一个字符(在本例中为字符串),并在读取失败时设置 EOF 标志。因此,循环在读取“abc”后结束。
解决混乱
为了避免混乱,请务必注意:
执行读取和 EOF 标志更新。
因此,使用>>建议使用 get() 代替 eof() 来准确检测文件结尾。
以上是C 的 `ifstream::eof()` 函数如何真正与 `get()` 和提取运算符一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!