Сброс состояния потока

У меня есть вопрос, который немного похож на этот вопрос о stackoverflow std::cin.clear() не может восстановить входной поток в хорошем состоянии, но ответ, предоставленный там, делает не работает для меня.

Вопрос в следующем: как я могу снова сбросить состояние потока на «хорошее»?

Вот мой код, как я его пробую, но состояние никогда больше не становится хорошим. Я использовал обе строки игнорирования по отдельности.

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;
}

7
задан Community 23 May 2017 в 12:25
поделиться