Как очистить биты состояния в объекте iostream в C ++?

Я пытаюсь выучить C ++ из более старой версии Primer, и попытался выполнить часть их кода, относящегося к объектам 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.clear() но безрезультатно. Итак, мой вопрос, как мне вернуть Cin в состояние без ошибок?

1

Решение

Если я не ошибаюсь, cin.clear (iostream :: failbit) устанавливает новое состояние как сбойное. Вы должны сначала избавиться от той части ввода, которая вызывает проблемы, а затем использовать cin.clear() или же cin.clear(iostream::goodbit),

Для получения дополнительной информации, смотрите здесь: http://www.cplusplus.com/reference/ios/ios/clear/

0

Другие решения

Других решений пока нет …