C++ обработка некорректного значения

Модератор: Модераторы разделов

Аватара пользователя
ArkanJR
Сообщения: 1122

C++ обработка некорректного значения

Сообщение ArkanJR »

Как быть с некорректно введёнными значениями переменных? Допустим имеется, программа сложения двух чисел. Если при вводе первого или второго значения вместо числа была введена, например, буква, то итоге получим аварийное завершение работы программы. Как вариант, для недопущения подобного, можно написать программу таким образом, чтобы в случае ввода нечислового значения выводилось сообщение об ошибке ввода:

Код: Выделить всё

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
char d;
do
{
double a, b, c;
system("clear");
cout << "Введите первое число: ";
cin >> a;
if(!cin)
{
cout << "Ошибка ввода!" << endl;
cin.clear();
fflush(stdin);
}
else
{
cout << "Введите второе число: ";
cin >> b;
if(!cin)
{
cout << "Ошибка ввода!" << endl;
cin.clear();
fflush(stdin);
}
else
{
c = a + b;
cout << "Сумма чисел равна: ";
cout << c << endl << endl;
}
}
cout << "Выйти из программы?" << endl;
cout << "Для выхода из программы введите 'д'," << endl;
cout << "для продолжения работы введите 'н': ";
cin >> d;
}
while(d != 'д');
return 0;
}
Но есть ли способ вообще предотвратить введение некорректного значения, чтобы при вводе, например, буквы, скобки или знака препинания, данный символ вообще не печатался бы на экране?
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: C++ обработка некорректного значения

Сообщение Bizdelnick »

Терминал передаёт программе только целые строки (заканчивающиеся символом '\n'). Помнится, в какой-то теме тут это детально обсуждалось. (Upd.: Re: Начинаю осваивать C, появляются вопросы...)
P. S. Используйте отступы, не издевайтесь над теми, кто будет читать Ваш код.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: C++ обработка некорректного значения

Сообщение Hephaestus »

ArkanJR писал:
22.04.2019 19:24
Но есть ли способ вообще предотвратить введение некорректного значения, чтобы при вводе, например, буквы, скобки или знака препинания, данный символ вообще не печатался бы на экране?
А какой в этом смысл? Я в плюсах не силён, но вроде бы там есть механизм обработки ошибок.
Вот прямая обязанность обработчика ошибок - не допустить аварийного завершения и позволить пользователю скорректировать ввод.

Если символ не выведен на экран - это ещё не значит, что он отброшен (см. например, ввод пароля).
А если реально фильтровать недопустимые символы, то есть отбрасывать их, то всё равно нужна какая-то обратная связь, чтобы пользователь понимал, что происходит. И в итоге вы придёте к этой же самой обработке ошибок, о которой я уже сказал.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: