diff --git a/du3/program.c b/du3/program.c index e6bab3c..83279e4 100644 --- a/du3/program.c +++ b/du3/program.c @@ -13,63 +13,85 @@ float zaokruhli(float cislo){ int main(){ char riadok[100]; while (fgets(riadok, sizeof(riadok), stdin)){ - if (riadok[0] == '\n'){ + riadok[strcspn(riadok, "\n")] = 0; + + if (strlen(riadok) == 0){ break; } char *ptr = riadok; while (*ptr == ' ') ptr++; - float cislo1 = strtof(ptr, &ptr); + + char *endptr; + float cislo1 = strtof(ptr, &endptr); + if (ptr == endptr){ + printf("CHYBA\n"); + continue; + } + ptr = endptr; while (*ptr == ' ') ptr++; char operacia = *ptr; - ptr++; - - while (*ptr == ' ') ptr++; - float cislo2 = strtof(ptr, &ptr); - - while (*ptr == ' ') ptr++; - if (*ptr != '=') { + if (operacia != '+' && operacia != '-' && operacia != '*' && operacia != '/') { printf("CHYBA\n"); continue; } ptr++; while (*ptr == ' ') ptr++; - float zadany_vysledok = strtof(ptr, &ptr); + float cislo2 = strtof(ptr, &endptr); + if (ptr == endptr){ + printf("CHYBA\n"); + continue; + } + ptr = endptr; + + while (*ptr == ' ') ptr++; + if (*ptr != '='){ + printf("CHYBA\n"); + continue; + } + ptr++; + + while (*ptr == ' ') ptr++; + float zadany_vysledok = strtof(ptr, &endptr); + if (ptr == endptr || *endptr != '\0'){ + printf("CHYBA\n"); + continue; + } float skutocny_vysledok = 0; int chyba = 0; - switch(operacia){ - case '+': skutocny_vysledok = cislo1 + cislo2; break; - case '-': skutocny_vysledok = cislo1 - cislo2; break; - case '*': skutocny_vysledok = cislo1 * cislo2; break; - case '/': - if (cislo2 == 0){ - chyba = 1; - } - else - { + switch(operacia){ + case '+': skutocny_vysledok = cislo1 + cislo2; break; + case '-': skutocny_vysledok = cislo1 - cislo2; break; + case '*': skutocny_vysledok = cislo1 * cislo2; break; + case '/': + if (cislo2 == 0) { + chyba = 1; + } + else + { skutocny_vysledok = cislo1 / cislo2; } - break; - default: chyba = 1; + break; + default: chyba = 1; } - if (chyba) { + if (chyba){ printf("CHYBA\n"); continue; } - if (zaokruhli(skutocny_vysledok) == zaokruhli(zadany_vysledok)){ + if (fabs(zaokruhli(skutocny_vysledok) - zaokruhli(zadany_vysledok)) < TOLERANCE) { printf("OK\n"); - } - else - { - printf("ZLE\n"); - } - } - return 0; + } + else + { + printf("ZLE\n"); + } + } + return 0; }