以前のバージョンの 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 の failbit を実際に「クリア」しないことを通知します。cin.clear()
私も無駄に使ってみました。私の質問は、cin をエラーのない状態に戻す方法を教えてください。