首页 > 后端开发 > C++ > 使用 C 文件输入流时如何避免重复读取行?

使用 C 文件输入流时如何避免重复读取行?

Barbara Streisand
发布: 2024-12-15 13:28:16
原创
232 人浏览过

How Can I Avoid Double-Reading Lines When Using C   File Input Streams?

测试文件输入的流状态:避免双重读取

从文件读取数据时,必须避免多次读取同一行次。但是,在读取之前检查诸如 good() 或 !eof() 之类的流状态可能会导致意外行为。

考虑以下代码:

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
登录后复制

此代码旨在读取所有行从文件开始直到到达末尾。但是,它会读取最后一行两次。要理解原因,我们需要深入研究流状态标志的内部结构。

流状态标志

good()、eof()、fail() 和bad() 是指示输入流当前状态的流状态标志。 good() 标志通常期望指示流是否处于有效状态以供进一步读取,但这并不严格准确。更准确的描述是不存在错误或文件结束条件。

good() 和 !eof() 的问题

当您检查流时.good() 或 !stream.eof() 在读取之前,您不会询问流下一次读取操作是否会成功。您仅查询当前状态。

例如,当从文件中读取最后一行时,会设置 eof() 标志。但是,good() 标志可能仍然为 true,表示上次读取期间没有发生错误。

解决方案

为了避免重复读取,正确的做法是读取操作后测试流:

// Read all lines from a file
for (std::string line; getline(f, line);) {
  process(line);
}

// Read an integer and store it in foo
int foo;
if (f >> foo) {
  use(foo);
} else {
  handle_error();
}
登录后复制

此方法可确保您只处理从文件中成功读取的数据。

以上是使用 C 文件输入流时如何避免重复读取行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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