我正在尝试从旧版本的 Primer 中学习 C++,并尝试执行他们的一些与 iostream 对象相关的代码,这给我带来了一些麻烦:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
int ival;
try
{
while (cin >> ival, !cin.eof())
{
if (cin.bad())
throw runtime_error("IO stream corrupted");
if (cin.fail())
{
cerr << "Invalid input - try again";
cin.clear(iostream::failbit);
continue;
}
else
cout << ival << endl;
}
return EXIT_SUCCESS;
}
catch(runtime_error err)
{
cout << err.what();
return EXIT_FAILURE;
}
}
当此程序遇到无效输入时,它会输出“无效输入 - 重试”而不停止,表示cin.clear(iostream::failbit)
实际上并未“清除”cin 的故障位。我也试过只是使用cin.clear()
无济于事。所以我的问题是,如何将 cin 恢复到非错误状态?