Решение через switch – в принципе, самое простое (исключая вариант eval()) и распространенное.
Я знаю, что похожие вопросы задали ранее. Но всё-таки мне хотелось бы узнать, можно ли начиркать функцию для калькулятора, опираясь на код, мной написанный до сих пор. Eval по последовательности токенов вычисляет значение. Для вычисления используется алгоритм сортировочной станции.shunting-yard algorithm – более подробное изложение, на английском. Ну и я бы вместо лесенки if’ов использовал switch. Я написал код, кой работает лишь для первого случая. Если вы получили неверный плод или хотите попросить, чтобы мы расширили потенциал калькулятора, отправьте отзыв. Символ градуса находится под кнопкой тригонометрии (sin, cos, tan, cot) верху клавиатуры. Оставил без изменения целочисленное деление, хотя в постановке задачи об этом не было сказано и я бы поставил простое деление.
Я бы начал с того, чтобы внес первый инпут внутрь ситуация цикла и убрал бы сравнение, так словно сам плод присвоения и будет либо 0 (False) либо не ноль и тогда цикл отработает. Это избавит нас от двух лишних инпутов и от проверки завершения программы по вводу ноля. Заменил бы If/elif на match/case для красоты и заменил бы проверку деления на ноль на однострочник. Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности. Чтобы упростить код и избежать повторений, можно упростить проверку оператора в цикле while и избежать лишних условий внутри цикла. Также можно прибрать лишние input() и использовать только один input() для оператора и чисел. Я, правда, некрепко понимаю какое применение у таких калькуляторов на практике, т.к. Во-первых нету проверки вводимых символов (нужно ограничить ввод), нету проверки на ошибки (например, деление на ноль), нету десятичного разделителя.
Поскольку вы учите С++, вместо printf и scanf лучше использовать cout и cin. В них не нужно радеть о формате принимаемого и выводимого значений, плюс нету этакий проблемы, чисто попадание в буфер ввода не того символа. В вашем случае вместо %d для считывания значений типа float нужно использовать %f, а для считывания символа %c. Во время работы вашего кода после поправки форматирования у меня, например, вместо считывания символа операции считывался знак новой строки, и ввод переходил зараз на второе число. Для избежания этого следовало бы очистить буфер ввода командой fflush(stdin). Однако все эти вопросы решаются использованием cout и cin. Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Реализуйте безыскусный калькулятор, какой позволяет выполнять операции сложения, вычитания, умножения и деления двух целых чисел. В отдельной функции для каждой операции, смысла нету – потому что при смене операции в интерфейсе, в алгоритме меняется прощай одно деяние… И если мы разделим логику на 4 функции, то не сможем избежать дублирования кода остальных, общих действий (нарушим принцип DRY). Например, при нажатии на кнопку оператора, соответствующе устанавливаем переменную текущего оператора. Затем, при нажатии на кнопку равняется считаем результат в зависимости от текущего оператора. Интерфейс и распределения кнопок умею вставить, но не успеваю построить функцию, которая изменяет оператор в переменной result в зависимости от избранной кнопки операции. На википедии жрать теоретический материал. С помощью стрелок в верхнем ряду вы можете перемещать курсор по тексту проблемы. Используйте кнопку ↵, если вы хотите перебежать на новую строку (например, лесбийские порно видео при вводе систем уравнений).