Meliborn
@Meliborn

Как работать с try — catch при проверке ввода в С++?

Есть переменная типа int, делаю cin >> var. В случае, если пользователь введет тест, либо что-то нехорошее, то необходимо вывести свой текст ошибки без завершения приложения. Пробую так:
try<br/>
{<br/>
cin &gt;&gt; var;<br/>
}<br/>
catch(std::exception& e)<br/>
{<br/>
cout &lt;&lt; &quot;Ошибка ввода!&quot;;<br/>
}<br/>


В случае ошибки текст выводится, но приложения на этом завершается. Как быть? Никак не могу разобраться с try catch :(

Приложение — простая консолька.
  • Вопрос задан
  • 7833 просмотра
Пригласить эксперта
Ответы на вопрос 6
gaelpa
@gaelpa
Указатель в cin при ошибке не сдвигается.
1. как написал superhabra, надо снимать failbit cin.clear()
2. надо чем-то сдвигать указатель, например cin.ignore(1)
Ответ написан
Комментировать
superhabra
@superhabra
try
{
cin >> var;
}
catch(std::exception& e)
{
cin.clear();
cout << «Ошибка ввода!»;
}
Ответ написан
Комментировать
Dzuba
@Dzuba
А приложение завершается в другом месте, вне конструкции try catch, ведь так?
Возможно из-за того, что var так и не был введен.
Имеет смысл погрузить конструкцию в цикл, например:
int var = 0;
do
{
try
{
cin >> var;
}
catch(std::exception& e)
{
cout << "Ошибка ввода!";
}
} while (var == 0);
Ответ написан
gaelpa
@gaelpa
А дальше, в зависимости от того, что надо.
Если консоль с ручным вводом, то скорее всего игнор нужен до "\n" (типа cin.ignore(100500,'\n').
Ответ написан
@SkyKos
Возможно, ваше приложение завершается потому, что за блоком try-catch ничего нет. Можно оформить ввод в виде цикла, например, вот так:
std::string str;
while (std::cin >> str)
{
//Process string here
}
Ответ написан
Комментировать
А что дальше-то идет? Может, оно в другом месте завершается. Например, там, где используется var с непонятно каким значением.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы