Сведения о вопросе

rjevskii

10:55, 2nd October, 2020

Теги

C++    

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

Просмотров: 291   Ответов: 6

Есть переменная типа 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 :(

Приложение — простая консолька.



  Сведения об ответе

darknet

14:28, 25th September, 2020

Указатель в cin при ошибке не сдвигается.
1. как написал superhabra, надо снимать failbit cin.clear()
2. надо чем-то сдвигать указатель, например cin.ignore(1)


  Сведения об ответе

COOL

22:03, 28th September, 2020

try
{
cin >> var;
}
catch(std::exception& e)
{
cin.clear();
cout << «Ошибка ввода!»;
}


  Сведения об ответе

baggs

09:40, 28th September, 2020

А приложение завершается в другом месте, вне конструкции try catch, ведь так?
Возможно из-за того, что var так и не был введен.
Имеет смысл погрузить конструкцию в цикл, например:
int var = 0;
do
{
try
{
cin >> var;
}
catch(std::exception& e)
{
cout << "Ошибка ввода!";
}
} while (var == 0);


  Сведения об ответе

VCe znayu

03:03, 27th September, 2020

А дальше, в зависимости от того, что надо.
Если консоль с ручным вводом, то скорее всего игнор нужен до "\n" (типа cin.ignore(100500,'\n').


  Сведения об ответе

DO__IT

02:04, 28th September, 2020

Возможно, ваше приложение завершается потому, что за блоком try-catch ничего нет. Можно оформить ввод в виде цикла, например, вот так:
std::string str;
while (std::cin >> str)
{
//Process string here
}


  Сведения об ответе

9090

19:18, 27th September, 2020

А что дальше-то идет? Может, оно в другом месте завершается. Например, там, где используется var с непонятно каким значением.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться