
C/C++
Как сделать проверку на число типо если кто то ввел не число то будет чтото выводить на экран c++
Можно эту проверку сделать в последнем else if ?


в плюсах не пишу, к сожалению, но логику могу подсказать:
По хорошему эту проверку надо в самом начале делать, иначе у тебя предположительно прога выкинет исключение раньше, чем дойдет до проверки на число. Не знаю как плюсы отреагируют на подачу им данных другого типа (тоесть если я напишу АБВ, вместо числа). Если никак, то да, теоретически ты можешь последний else if() заменить просто на else{} и вывести, что введенные данные не верны т. к. прога у тебя просто проверяет возраст больше или меньше 7.
Вот нашел на просторах инета проверку на тип введенных данных, должно помочь:
double i;
cin >> i;
while (!(i != static_cast(i) )
{
cout << "Error. Please enter a valid input: ";
cin >> i;
cin.ignore(80, '\n');
}
По хорошему эту проверку надо в самом начале делать, иначе у тебя предположительно прога выкинет исключение раньше, чем дойдет до проверки на число. Не знаю как плюсы отреагируют на подачу им данных другого типа (тоесть если я напишу АБВ, вместо числа). Если никак, то да, теоретически ты можешь последний else if() заменить просто на else{} и вывести, что введенные данные не верны т. к. прога у тебя просто проверяет возраст больше или меньше 7.
Вот нашел на просторах инета проверку на тип введенных данных, должно помочь:
double i;
cin >> i;
while (!(i != static_cast(i) )
{
cout << "Error. Please enter a valid input: ";
cin >> i;
cin.ignore(80, '\n');
}
Сейчас сброшу примеры ввода. Ранее делали здесь
С точки зрения эргономики консоли лучше всего вводить строку, а потом распознавать её вид как число. Такие функции, как stoi(), stod(), обладают возможностями отлавливать некорректное значение параметра.
Но такие же возможности есть и у потоков ввода. Существует термин "повреждение потока". Причём, это не считается ошибкой и ни операционной системой, ни тем более компилятором не отслеживается. Однако, собственные методы потоков дают возможность выяснить в любой момент: исправен поток или повреждён? Например, cin.fail() возвращает true, если поток повреждён.
Чтобы сбросить состояние потока, следует вызвать cin.clear()
Но такие же возможности есть и у потоков ввода. Существует термин "повреждение потока". Причём, это не считается ошибкой и ни операционной системой, ни тем более компилятором не отслеживается. Однако, собственные методы потоков дают возможность выяснить в любой момент: исправен поток или повреждён? Например, cin.fail() возвращает true, если поток повреждён.
Чтобы сбросить состояние потока, следует вызвать cin.clear()
Денис Дубинкин
Если выше чтения из потока переменной присвоить значение, то уже после ввода, если переменная сохранила своё исходное значение, то это считается косвенным, хотя и не достоверно, признаком повреждения потока.
Вообще, предварительная инициализация переменной, в которую должен осуществляться ввод, считается хорошим тоном в программировании, поскольку в случае некорректного ввода в переменной остаётся неизменённое значение. А если инициализации не было, то может нарушиться логика программы!!!
В Вашем примере, разве логично судить о введённом значении, когда фактически ничего не введено, а исходное значение переменной age непредсказуемо?
Вообще, предварительная инициализация переменной, в которую должен осуществляться ввод, считается хорошим тоном в программировании, поскольку в случае некорректного ввода в переменной остаётся неизменённое значение. А если инициализации не было, то может нарушиться логика программы!!!
В Вашем примере, разве логично судить о введённом значении, когда фактически ничего не введено, а исходное значение переменной age непредсказуемо?
Похожие вопросы
- Из двух чисел с разной четностью вывести на экран нечетное число.
- Не выводит элементы массива(C++)
- Разработайте программу, которая выводит на экран таблицу:
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- Задача по С++, генератор случайных чисел(сортирует что бы не было одинаковых чисел))
- Даны число N и последовательность из N целых чисел. Найти количество и сумму тех чисел, которые нечетны и положительны.
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- C++. Как найти 3 самых больших числа из ряда чисел введенных пользователем?
- C++ Вычислить и вывести на экран в виде таблицы
- Напишите программу, которая выводит таблицу факториалов от 1 до 10. c++
https://pastebin.com/tTcB2HyU
здесь в частности cin.good(); проверяет на возникновении ошибки ввода в int некорректного значения