хотел создать консольный калькулятор на c++ с простейшими функциями по типу деления умножения и т.п. и создал цикл в котором если юзер вводит неверный оператор то вылазит ошибка и его просят повторить запрос снова, но если юзер введет уже 2-значный текст в выборе оператора то ошибка повторится заново, как можно это исправить
Один из способов решения этой проблемы - это использование 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
Используй цикл while чтобы продолжать запрашивать оператор до тех пор, пока он не будет введен правильно, и используйте cin.clear() и cin.ignore() для очистки ошибок ввода при неверном вводе оператора.
В вашем случае программа не может отличить был ли введен следующий символ после того, как пользователь прочел предупреждение о неправильном вводе, или он был введен заранее (например если вы хотите вводить данные одной строкой).
Проще всего было бы просто игнорировать все, что не является + - / * при вводе оператора и не выдавать предупреждений.
Другая метода - ввести переменную о факте выдачи предупреждения и не выводить тоже самое предупреждение если эта переменная уже его запечатлела, а успешного ввода не было. bool sucs = false;
switch (op)
{
case '+':
sucs = false; ... //при успешном вводе обнуляем переменную
case '-':
sucs = false; ... //тоже для всех успешных операторов
...
default:
if (!sucs) cout