深入了解 ifstream 的 eof() 函数
理解 ifstream 的 eof() 函数的行为可能会令人费解,如提供的代码片段所示:
<前>
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;
}
让我们深入研究一下解释提供:
何时真正设置 EOF
eof() 函数会检测读取操作何时尝试访问文件末尾之外的数据,这意味着:
此行为的原因是为了确保与不同设备(例如管道和套接字)的兼容性,其中文件大小的概念可能不像文本那么简单file.
揭开 get() 和 >>
代码片段中的两个循环使用不同的方法来读取文件内容的魔力:
这解释了为什么第一个循环读取一个额外的字符并显示 -1,而第二个循环给出正确的输出 - 它在尝试读取超出末尾的内容之前终止循环
避免 -1 的危险
为了避免依赖幻数 -1 来识别文件结尾,建议使用 std: :char_traits
以上是为什么 `ifstream::eof()` 与 `get()` 和提取运算符 (`>>`) 的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!