C++ проблема c двойным выводом ошибки - Вопросы по С+

Вопрос C++ проблема c двойным выводом ошибки

Регистрация
27 Авг 2013
Сообщения
105
Репутация
0
Спасибо
0
Монет
0
хотел создать консольный калькулятор на c++ с простейшими функциями по типу деления умножения и т.п. и создал цикл в котором если юзер вводит неверный оператор то вылазит ошибка и его просят повторить запрос снова, но если юзер введет уже 2-значный текст в выборе оператора то ошибка повторится заново, как можно это исправить
306286202_d6971322b7f618603da4bb12695af99a_240x240.png

306286202_e9ad3445978662c0de535e9099f848fd_240x240.png

 
Регистрация
6 Апр 2013
Сообщения
80
Репутация
0
Спасибо
0
Монет
0
cin >> op;
cin.ignore(0x1000, '\n'); cin >> num1 >> num2;
cin.ignore(0x1000, '\n');
 
Регистрация
22 Июн 2013
Сообщения
91
Репутация
0
Спасибо
0
Монет
0
Один из способов решения этой проблемы - это использование cin.ignore() после каждого неправильного ввода. Это позволит очистить входной поток и предотвратить повторную ошибку. Вот пример кода, который может помочь: #include
using namespace std;

int main() {
char op;
bool valid = false;
while (!valid) {
cout > op;
if (op == '+' || op == '-' || op == '*' || op == '/') {
valid = true;
} else {
cout
 
Регистрация
29 Мар 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
Используй цикл while чтобы продолжать запрашивать оператор до тех пор, пока он не будет введен правильно, и используйте cin.clear() и cin.ignore() для очистки ошибок ввода при неверном вводе оператора.
 
Регистрация
15 Июн 2013
Сообщения
82
Репутация
0
Спасибо
2
Монет
0
В вашем случае программа не может отличить был ли введен следующий символ после того, как пользователь прочел предупреждение о неправильном вводе, или он был введен заранее (например если вы хотите вводить данные одной строкой).
Проще всего было бы просто игнорировать все, что не является + - / * при вводе оператора и не выдавать предупреждений.
Другая метода - ввести переменную о факте выдачи предупреждения и не выводить тоже самое предупреждение если эта переменная уже его запечатлела, а успешного ввода не было. bool sucs = false;
switch (op)
{
case '+':
sucs = false; ... //при успешном вводе обнуляем переменную
case '-':
sucs = false; ... //тоже для всех успешных операторов
...
default:
if (!sucs) cout
 
Сверху Снизу