#c #exception #stdin
#c #исключение #stdin
Вопрос:
Я попытался создать программу, которая принимает входные данные до тех пор, пока не будет введено значение -1, и правильно обрабатывает входные данные, используя исключения.
Он принимает вводимые пользователем данные FirstName
Age
и выводит FirstName
и увеличивает возраст на 1. Если вторая переменная не является целым числом (возраст), то она должна печатать FristName
и 0
.
Но моя программа выдает неожиданный результат. Как я могу это исправить?
Заранее спасибо.
Формат ввода
John 12
Michel 15
Alice Graz 11
Bob 15
-1
Ожидаемый результат
John 13
Michel 16
Alice 0
Bob 16
Мой код
#include <string>
#include <stdexcept>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string inputName;
int age;
cin.exceptions(ios::failbit);
cin >> inputName;
while (inputName != "-1")
{
try
{
cin >> age;
}
catch (exception ex)
{
age = -1;
if (cin.fail())
cin.clear();
cin.ignore();
}
cout << inputName << " " << (age 1) << endl;
cin >> inputName;
}
return 0;
}
Ответ №1:
попробуйте использовать cin.ignore()
так
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
Вы должны включить <limits>
файл заголовка.
Комментарии:
1. Спасибо, что работает. но есть предупреждение предупреждение: перехват полиморфного типа ‘class std::exception’ по значению [-Wcatch-value=] catch (исключение ex)
2. можете ли вы просто объяснить, что делает эта строка и почему она передает такой числовой предел вместе с ‘n’. Спасибо
3. вместо этого попробуйте этот оператор catch
catch(std::ios_base::failureamp; faill)
4. вы можете сослаться на это cplusplus.com/reference/istream/istream/ignore
5. Большое вам спасибо.