首页 > 后端开发 > C++ > C 的 `ifstream::eof()` 函数如何真正与 `get()` 和提取运算符一起工作?

C 的 `ifstream::eof()` 函数如何真正与 `get()` 和提取运算符一起工作?

Susan Sarandon
发布: 2024-11-29 18:48:11
原创
452 人浏览过

How Does C  's `ifstream::eof()` Function Really Work with `get()` and the Extraction Operator?

理解 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”后结束。

解决混乱

为了避免混乱,请务必注意:

  • -1 是 get() 指示文件结束的方式。
  • eof() 设置超出文件末尾的读取尝试失败后的 EOF 标志。
  • 执行读取和 EOF 标志更新。

因此,使用>>建议使用 get() 代替 eof() 来准确检测文件结尾。

以上是C 的 `ifstream::eof()` 函数如何真正与 `get()` 和提取运算符一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板