diff --git a/cv3/program.c b/cv3/program.c index b7e5531..43a66de 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #define MAX_VELKOST 10 @@ -77,6 +78,15 @@ bool je_platna_operacia(char operacia) { return operacia == '+' || operacia == '-' || operacia == '*' || operacia == '/'; } +// Funkcia na validáciu, či je vstup platným číslom +bool je_platne_cislo(const char *vstup) { + char *koniec; + strtof(vstup, &koniec); // Prevedie reťazec na číslo + + // Ak ukazovateľ koniec nesmeruje na '\0', vstup obsahuje neplatné znaky + return *koniec == '\n' || *koniec == '\0'; +} + int main() { KalkulackaZasobnik kalkulacka; inicializuj(&kalkulacka); @@ -89,26 +99,14 @@ int main() { break; } - float hodnota; - char operacia; - char *zvysok; - - if ((sscanf(vstup, "%f", &hodnota) == 1) && (strtok(vstup, " \n") != NULL)) { - // Kontrolujeme, či za číslom nie je ďalší neplatný vstup - if (strtok(NULL, " \n") == NULL) { - vloz(&kalkulacka, hodnota); - zobraz_zasobnik(&kalkulacka); - } else { - printf("bad input\n"); - return 0; - } + if (je_platne_cislo(vstup)) { + float hodnota = strtof(vstup, NULL); // Prevedieme platné číslo + vloz(&kalkulacka, hodnota); + zobraz_zasobnik(&kalkulacka); } + else if (strlen(vstup) == 2 && je_platna_operacia(vstup[0])) { // Kontrolujeme, či vstup je operácia + char operacia = vstup[0]; - else if (sscanf(vstup, "%c", &operacia) == 1) { - if (!je_platna_operacia(operacia)) { - printf("bad input\n"); - return 0; - } switch (operacia) { case '+': if (scitat(&kalkulacka)) { @@ -143,9 +141,10 @@ int main() { } else { vloz(&kalkulacka, b / a); zobraz_zasobnik(&kalkulacka); - printf("no input\n"); - return 0; } + } else { + printf("no input\n"); + return 0; } break; }