
C/C++
Я попробовал сделать мини калькулятор. Но испытываю проблему.
Когда при выборе действия умножения (3). Оно что ли багается и после этого выдает и результат и снова выводит на TryAgain лейбл. Скажите мастера, в чем моя ошибка?)


Более того, тот же эффект будет при вводе любого другого действия, кроме 4.
Дело в том, что у тебя проверяются ВСЕ УСЛОВИЯ ПОДРЯД, а твой else написан ТОЛЬКО ДЛЯ ПОСЛЕДНЕГО УСЛОВИЯ. Оно ВСЕГДА проверяется и если z не 4 - выполняется else.
Используй switch вместо if-ов и будет тебе счастье.
Дело в том, что у тебя проверяются ВСЕ УСЛОВИЯ ПОДРЯД, а твой else написан ТОЛЬКО ДЛЯ ПОСЛЕДНЕГО УСЛОВИЯ. Оно ВСЕГДА проверяется и если z не 4 - выполняется else.
Используй switch вместо if-ов и будет тебе счастье.
Андрей Никитин
Спасибо большое)
#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';
}
}
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 написал? Тебя в школе не учили, что так делать не нужно?
Андрей Никитин
В школе даже не учат). Я хотел что бв если ввел число не с 1 до 4 то просил заного ввести число)
Похожие вопросы
- Не могу разораться с калькулятором на языке СИ
- Как работает реальный калькулятор?
- История в калькуляторе
- Реализация Алгоритма калькулятора
- Разработать программу (калькулятор) на языке С++,
- Проблемы с сортировкой массива методом пузырька.
- Какой простенький проект можно сделать чтобы прокачать навыки? [если что учу c++]
- Проблема с указателем в C++
- Проблема с памятью?
- Программирование в C++, проблема с дополнительной функцией.