added project to git
sophuwu sophie@sophuwu.site
Sun, 27 Aug 2023 10:37:58 +0100
2 files changed,
91 insertions(+),
0 deletions(-)
A
main.cpp
@@ -0,0 +1,89 @@
+#include <cstdio> + +int checkInput(int argc) { + if (argc != 4) printf("%s", "Usage: calc <num1> <op> <num2>\n\n\tOperators: + - x / %\n\tExample: calc 10 / 5\n"); + return argc != 4; +} + +int getFloat(char* str, float* num) { + float iPart = 0; + float fPart = 0; + int fPartLen = 0; + int i = 0; + int sign = 1; + + if (str[0] == '-') { + sign = -1; + i++; + } + + while (str[i] != '.') { + if (str[i] == '\0') { + *num = sign * iPart; + return 0; + } + if (str[i] < '0' || str[i] > '9') return 1; + iPart = iPart * 10 + float(str[i]) - '0'; + i++; + } + i++; + while (str[i] != '\0') { + if (str[i] < '0' || str[i] > '9') return 1; + fPart = fPart * 10 + float(str[i]) - '0'; + fPartLen++; + i++; + } + while (fPartLen > 0) { + fPart /= 10; + fPartLen--; + } + *num = sign * (iPart + fPart); + return 0; +} + +int getInput(char* argv[], float* num1, float* num2, char* op) { + if (getFloat(argv[1], num1) || getFloat(argv[3], num2)) { + printf("%s", "Error: Invalid number\n"); + return 1; + } + *op = argv[2][0]; + if (*op != '+' && *op != '-' && *op != 'x' && *op != '/' && *op != '%') { + printf("%s", "Error: Invalid operator\n"); + return 1; + } + return 0; +} + +void calc(float num1, float num2, char op) { + switch (op) { + case '+': + printf("%f\n", num1 + num2); + return; + case '-': + printf("%f\n", num1 - num2); + return; + case 'x': + printf("%f\n", num1 * num2); + return; + case '/': + printf("%f\n", num1 / num2); + return; + case '%': + printf("%d\n", int(num1) % int(num2)); + return; + } +} + +int main(int argc, char* argv[]) { + if (checkInput(argc)) return 1; + + float num1 = 0; + float num2 = 0; + char op = argv[2][0]; + + if (getInput(argv, &num1, &num2, &op)) return 1; + + calc(num1, num2, op); + + return 0; +}