Поскольку вы учите С++, вместо printf и scanf лучше использовать cout и cin. В них не нужно заботиться о формате принимаемого и выводимого значений, плюс нету такой проблемы, как попадание в буфер ввода не того символа. В вашем случае вместо %d для считывания значений типа float нужно использовать %f, а для считывания символа %c. Во время работы вашего кода после поправки форматирования у меня, например, вместо считывания символа операции считывался знак новой строки, и ввод переходил сразу на второе число. Для избежания этого следовало бы очистить буфер ввода командой fflush(stdin). Однако все эти вопросы решаются использованием cout и cin. Далее, у вас дважды объявлена переменная c, одна - глобальная, а вторая - в области видимости case 1:. Внутри case 1: вы присваиваете результат локальной переменной, а команда вывода результата на экран находится вне области видимости этой переменной, и выводит на экран глобальную переменную c, которой ничего присвоено не было, отсюда и постоянный результат 0. Вот моя версия кода: #include <iostream> using namespace std; float a, b, c; char d; int p; int main() { while (p != 2) { cout << "1 = calculator \n 2 - exit \n"; cin >> p; switch (p) { case 1: { cout <<"First number "; cin >> a; cout << "Action with numbers "; cin >> d; cout << "Second number "; cin >> b; if (d == '+') c = a + b; if (d == '-') c = a - b; if (d == '*') c = a * b; if (d == '/') c = a / b; } case 2: { break; } } cout << "Result =" << c <<endl; } } (责任编辑:) |