From 78d882b0f68cf028e01e964dcff5a6a2cc5c651b Mon Sep 17 00:00:00 2001 From: giezz Date: Sat, 18 Feb 2023 20:54:25 +0300 Subject: [PATCH] Console calculator implementation (initial commit) --- .gitignore | 6 +++++ main.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 .gitignore create mode 100644 main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29e2411 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea + +cmake-buid-debug + +# Executables +*.exe diff --git a/main.c b/main.c new file mode 100644 index 0000000..8052885 --- /dev/null +++ b/main.c @@ -0,0 +1,67 @@ +#include +#include + +double calculate(char op, double num1, double num2) { + double result = 0; + switch (op) { + case '+': + result = num1 + num2; + break; + case '-': + result = num1 - num2; + break; + case '*': + result = num1 * num2; + break; + case '/': + result = num1 / num2; + break; + } + return result; +} + +int main() { + double number = 0; + double tmpNumber = 0; + char input; + char operator; + + while (1) { + scanf(" %c", &input); + switch (input) { + case '+': + operator = '+'; + tmpNumber = number; + number = 0; + break; + case '-': + operator = '-'; + tmpNumber = number; + number = 0; + break; + case '*': + operator = '*'; + tmpNumber = number; + number = 0; + break; + case '/': + operator = '/'; + tmpNumber = number; + number = 0; + break; + case '=': + printf("%lf\n", calculate(operator, tmpNumber, number)); + tmpNumber = 0; + number = 0; + break; + case 'q': + goto exit; + // operator doesn't match any case constant + default: + number = (number * 10) + atof(&input); + printf("%.1lf\n", number); + } + } + exit: + return 0; +}