У меня есть вопрос, который немного похож на этот вопрос на 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
Это просто 'clear()' очистить * все * флаги. Очистить один флаг немного сложнее (и не слишком полезно). Я добавил новую часть к моему ответу. –