Сделайте калькулятор на языке Си с возможностью сохранения исходного результата, произведите дальнейшие операции с полученным результатом..
Дорогие все - для школьного проекта я должен сделать калькулятор, который выполняет основные операции + - * / % и, если пользователь не вводит "x" (x останавливает программу и выводит результат), калькулятор должен функционировать как любой другой, так что, вводя, например, 5+3, выводит результат, а затем пользователь может сделать другую операцию над этим, например -1, затем результат печатается, и так далее, пока пользователь не нажмет X.
конечно, существуют и другие требования, например, если есть разделение с rest, пользователю предлагается выбрать, округлять ли результат или заканчивать вычисление... и что-то вроде "деление на 0 не допускается"
текущий статус "навыка" - мы сделали переключатель/корпус, петли и функции.
я играл с циклом do-while, но ничего не могу сделать; пока у меня есть только базовая штука с переключателем, и я знаю, что все это выглядит ужасно. любая помощь будет очень признательна!
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> int calculate(int num1, char op, int num2) { int gueltig = 0; //valid operation int ungueltig = 0; // operation is not valid int answer = 0; int rest = 0; // rest from int division switch (op) { case '+': answer = num1 + num2; ++gueltig; printf("Ergebnis: %d.\nProgram wird beendet. Es wurden %d gueltige Operationen und %d ungueltige Operationen durchgefuehrt.", answer, gueltig, ungueltig); // Result: XYZ. Program is completed. There were X valid operations and Y non valid operations. break; case '-': if (num1 > num2) { answer = num1 - num2; ++gueltig; printf("Ergebnis: %d\nProgram wird beendet. Es wurden %d gueltige Operationen und %d ungueltige Operationen durchgefuehrt.", answer, gueltig, ungueltig); } else { printf("Operation ist ungueltig!\nErgebnis darf nicht negativ sein!\nErgebnis: %d", num1); } break; case '*': answer = num1 * num2; ++gueltig; printf("Ergebnis: %d\nProgram wird beendet. Es wurden %d gueltige Operationen und %d ungueltige Operationen durchgefuehrt.", answer, gueltig, ungueltig); break; case '/': if (num2 == 0) { ++ungueltig; printf("Operation ist ungueltig!\nKeine Divisionen durch 0!\nErgebnis: %d", num1); } else if (num2 != 0) { if (num1 % num2 == 0) { answer = num1 / num2; ++gueltig; printf("Ergebnis: %d\nProgram wird beendet. Es wurden %d gueltige Operationen und %d ungueltige Operationen durchgefuehrt.", answer, gueltig, ungueltig); } else if (num1 % num2 !=0) { answer = num1 / num2; rest = num1 % num2; printf("Operation ist ungueltig! Ergebnis ist %d mit %d Rest. Soll gerundet(r), abgeschnitten(c) oder verworfen(x) werden?", answer, rest); } } } } int main() { int num1, num2; char op; do { scanf("%d %c %d", &num1, &op, &num2); // call the calculator and display the result int result = calculate(num1, op, num2); } while ( op != 'x'); // repeat until user types 0 0 0 */
Richard MacCutchan
В чем же проблема? получаете ли вы какой-либо результат, является ли он правильным, если нет, то что с ним не так? Пожалуйста, предоставьте подробные сведения.
Member Ana
Мои извинения - функции switch - case с одиночными операциями с двумя числами действительно работают, так что, например, пользователь вводит номер 1, затем какой-то оператор, затем номер 2, нажимает Enter, и результат отображается, и все.
Что мне нужно сделать, так это предоставить опции для дальнейших вычислений, пока пользователь не введет букву X (сделано с вычислениями), поэтому она должна выглядеть как 3+5 enter, отображается "результат: 8", а затем пользователь может, скажем, ввести -2, нажимает Enter, выводит "результат равен 6" и так далее, пока пользователь не введет "x", и программа заканчивается последним результатом, который был вычислен.
Richard MacCutchan
Это не должно быть слишком сложно. Сначала вам нужно вернуть ответ из функции calculate. Ваша основная функция должна сохранить этот ответ. Затем он может запросить у пользователя следующего оператора и номер телефона. Поэтому при следующем вызове calculate он должен передать сохраненный ответ в виде num1, а новое значение-в виде num2. Вы также должны добавить сообщения в main, чтобы сообщить пользователю, что вводить каждый раз.
Member Ana
Спасибо, Ричард, я постараюсь сделать это в соответствии с вашими советами и не буду стесняться задавать дополнительные вопросы, если они возникнут
Richard MacCutchan
А пока взгляните на эту статью OriginalGriff: Как написать код для решения проблемы, руководство для начинающих[^Он содержит несколько простых подсказок, которые помогут вам подумать о структуре вашего приложения.