C/C++

Я попробовал сделать мини калькулятор. Но испытываю проблему.

Когда при выборе действия умножения (3). Оно что ли багается и после этого выдает и результат и снова выводит на TryAgain лейбл. Скажите мастера, в чем моя ошибка?)
Более того, тот же эффект будет при вводе любого другого действия, кроме 4.
Дело в том, что у тебя проверяются ВСЕ УСЛОВИЯ ПОДРЯД, а твой else написан ТОЛЬКО ДЛЯ ПОСЛЕДНЕГО УСЛОВИЯ. Оно ВСЕГДА проверяется и если z не 4 - выполняется else.
Используй switch вместо if-ов и будет тебе счастье.
Максим Григорьев
Максим Григорьев
96 607
Лучший ответ
Андрей Никитин Спасибо большое)
#include <iostream>
using namespace std;
using func = double (*)(double, double);
double sum(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mul(double a, double b) { return a * b; }
double div(double a, double b) { return a / b; }
double calc(double a, double b, func fn) { return fn(a, b); }
int main() {
double a, b, x;
char op;
while (true) {
cout << ">>> ";
cin >> a >> op >> b;
switch (op) {
case '+': x = calc(a, b, sum); break;
case '-': x = calc(a, b, sub); break;
case '*': x = calc(a, b, mul); break;
case '/': x = calc(a, b, div); break;
}
cout << "<<< " << x << '\n';
}
}
Андрей Никитин Ух ты, спасибо. Я проверю)
Согласен. Проблема с мозгами - это действительно проблема!
Андрей Никитин Спасибо, Да ты прав. Я хотел познать С++ впервые в своей жизни, оказалось у меня дохера проблем с мозгами. Спасибо за мотивацию лять учиться дальше! ????
Во-первых, возвращаться надо к вводу чисел, а не выбору операции, во-вторых, гото это плохо и вредно.
Андрей Никитин Да че вы так против гото)?
Зачем ты goto написал? Тебя в школе не учили, что так делать не нужно?
Igor Arak
Igor Arak
30 155
Андрей Никитин В школе даже не учат). Я хотел что бв если ввел число не с 1 до 4 то просил заного ввести число)