我有一個問題,它與此問題在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
這只是清除()清除*所有*標誌。清除單個標誌有點複雜(並且不太有用)。我在答覆中增加了新的部分。 –