私はこの質問と少し類似している質問をstackoverflow std::cin.clear() fails to restore input stream in a good stateで持っていますが、ここで提供されている回答は私のためには機能しません。ストリームの状態をリセットする
問題は次のとおりです。もう一度ストリームの状態を「良い」状態にリセットするにはどうすればよいですか?
ここで私はそれを試してみますが、状態は決して良い状態に戻っていません。私は両方の行を別々に無視して使用しました。
はint _tmain(int argc, _TCHAR* argv[])
{
int result;
while (std::cin.good())
{
std::cout << "Choose a number: ";
std::cin >> result;
// Check if input is valid
if (std::cin.bad())
{
throw std::runtime_error("IO stream corrupted");
}
else if (std::cin.fail())
{
std::cerr << "Invalid input: input must be a number." << std::endl;
std::cin.clear(std::istream::failbit);
std::cin.ignore();
std::cin.ignore(INT_MAX,'\n');
continue;
}
else
{
std::cout << "You input the number: " << result << std::endl;
}
}
return 0;
}
私の本で言う:clear(flag)は、指定された条件ステートを有効に設定します。私はこれを次のように解釈しました:指定されたエラービットをクリアします。これは間違っていますか? – physicalattraction
* all *フラグをクリアするのは 'clear()'です。単一のフラグをクリアするにはもう少し複雑です(あまり役に立ちません)。私は私の答えに新しい部分を加えました。 –