在 ifstream 上调用 clear() 有问题吗?
Is calling clear() on an ifstream problematic?
我有一个函数,可以在循环中读取具有固定格式的文件,如下所示:
istream.seekg(0, std::ios::begin);
while (istream >> x >> y) {
// do something
}
正如我所发现的,并且在设置了循环退出eofbit
和failbit
后,这里已经很好地记录了。我希望能够在下次调用函数时再次重新读取文件,而无需关闭并重新打开ifstream
因此要使其正常工作,我必须先添加一个istream.clear()
。对我来说似乎很奇怪,因为 c++11 记录的 seekg()
行为说它会清除eofbit
但它对failbit
没有任何作用,这使得seekg()
的这一方面对我来说似乎毫无用处。无论如何,调用clear()
是否存在任何问题,例如隐藏任何潜在的错误条件等?
首先,让我在这里非常准确地介绍一下术语。当设置了坏位或故障位时,循环结束,但碰巧当设置了 eof 位时,故障位也会被设置。
bad
位表示更严重(不可恢复(的错误,因此如果您检查istream.bad()
是否为假,则调用clear
以重用流应该没问题。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 我在范围内未声明的错误类有问题
- 我的C++语言蛮力算法有问题
- 我关于函数"Assert"的C++代码有问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++类中的友元函数有问题?
- 我对数组即 0x6dfe78 有问题
- 我对 std::unique(算法)C++有问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 这个模板为什么有问题?如何正确编译
- 我对 MyGraph 属性顶点名称和边权重有问题
- delete[]有问题,如何部分删除内存
- 在C++中使用exit()退出程序有问题吗
- 跳转到if(false)块有问题吗
- 查找有问题的宏
- 使用 rand() 和 srand() 有问题
- C++ 回文程序总是给出 0(假)作为输出问题;我的代码哪里有问题?
- 我在 C++ "out_of_range at memory location"有问题
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 在 ifstream 上调用 clear() 有问题吗?