From 9977715ddcc509c1df5b75cf57174a82eb4b1759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kl=C3=A9ger?= Date: Mon, 20 Oct 2025 21:05:54 +0200 Subject: [PATCH] ex-05: Improve edge case handling --- exercise-05-calculator/main.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/exercise-05-calculator/main.c b/exercise-05-calculator/main.c index d2552bd..f09f045 100644 --- a/exercise-05-calculator/main.c +++ b/exercise-05-calculator/main.c @@ -8,7 +8,8 @@ int main() { double num1, num2; char op; - if (scanf(" %lf %c %lf = ", &num1, &op, &num2) != 3) { + char equal_sign; + if (scanf("%lf %c %lf %c", &num1, &op, &num2, &equal_sign) != 4 || equal_sign != '=') { printf("Nespravny vstup.\n"); return EXIT_FAILURE; } @@ -35,13 +36,18 @@ int main() { result = num1 * num2; break; case '/': - result = floor(num1 / num2); + result = num1 / num2; + if (result < 0) { + result = ceil(num1 / num2); + } else { + result = floor(num1 / num2); + } break; - }; + } - if (result > INT_MAX) { - printf("%.1e\n", result); - } else { + if (fabs(result - (int)result) < 1e-9) { printf("%ld\n", (long)result); + } else { + printf("%.12g\n", result); } }