asi final
zacistene, fgets mi zacisti pole, nemusim si memsetovat, odstranenie zbytocnych premennych. nemusim robit zbytocne divne funkcie, strtof mi to pekne rozparsuje
This commit is contained in:
parent
1381041acf
commit
e84cf19cb5
@ -1,41 +1,91 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#define LINE_SIZE 100
|
#define LINE_SIZE 100
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
char input[LINE_SIZE];
|
char input[LINE_SIZE];
|
||||||
memset (input, '\0', LINE_SIZE);
|
char* cast1; //budem prehadzovat odseknuty riadok hore dole
|
||||||
char* end;
|
|
||||||
|
|
||||||
do {
|
while (1) {
|
||||||
char *citaj = fgets (input, LINE_SIZE, stdin);
|
if (fgets(input, LINE_SIZE, stdin) == NULL || input [0] == '\n') break;
|
||||||
if (input[0] != '\n' || input == NULL) exit(0);
|
|
||||||
float a;
|
char *cast2 = input; //beriem si nacitany riadok ktory idem riesit
|
||||||
float b;
|
|
||||||
float result;
|
//nacitam si prve cislo a okontrolujem ci je validne
|
||||||
char seg_a[20];
|
float a = strtof(cast2, &cast1); //float kde si nahram prve cislo prikladu
|
||||||
char operation[1];
|
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
|
||||||
char seg_b[20];
|
printf ("CHYBA\n");
|
||||||
char seg_c[20];
|
continue;
|
||||||
int i = 0;
|
|
||||||
for (; i < LINE_SIZE; i++) {
|
|
||||||
if ((input[i] >= '0' && input[i] <= '9') || input[i] == '.') {
|
|
||||||
seg_a[i] = input[i];
|
|
||||||
}
|
}
|
||||||
|
cast2 = cast1; //ulozim si poziciu v pamati kde som naposledy skoncil
|
||||||
|
|
||||||
|
while (*cast2 == ' ') cast2++; //zbavim sa medzier
|
||||||
|
|
||||||
|
char operacia = *cast2; //nacitam si do jednotkovej premennej char prvy prvok pola cast2,
|
||||||
|
//ktory by malo byt znamienko operacie
|
||||||
|
if (operacia != '+' || operacia != '-' || operacia != '*' || operacia != '/') {
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cast2++; //posuniem sa na dalsiu poziciu pola char kde by malo byt cislo alebo medzera
|
||||||
|
|
||||||
|
while (*cast2 == ' ') cast2++; //zbavim sa medzier
|
||||||
|
|
||||||
|
float b = strtof(cast2, &cast1); //float kde si nahram druhe cislo prikladu (kopia nacitania prveho cisla)
|
||||||
|
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
cast2 = cast1; //ulozim si poziciu v pamati kde som naposledy skoncil
|
||||||
|
|
||||||
memset (input, '\0', LINE_SIZE);
|
while (*cast2 == ' ') cast2++; //zbavim sa medzier po =
|
||||||
} while (input[0] != '\n')
|
char operacia = *cast2; //nacitam si do jednotkovej premennej znak, dufam ze je to =
|
||||||
|
if (operacia != '=') {
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float c = strtof(cast2, &cast1); //float kde si nahram druhe cislo prikladu (kopia nacitania prveho cisla)
|
||||||
|
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float vysledok;
|
||||||
|
|
||||||
|
switch (operacia) {
|
||||||
|
case '+':
|
||||||
|
vysledok = a + b;
|
||||||
|
break;
|
||||||
|
case '-':
|
||||||
|
vysledok = a - b;
|
||||||
|
break;
|
||||||
|
case '*':
|
||||||
|
vysledok = a * b;
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
if (b == 0) {
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
vysledok = a / b;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf ("CHYBA\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float zaokruhleny_vysledok = roundf(vysledok * 100) / 100; //zaokruhlim moj vysledok na 2 des. miesta
|
||||||
|
float zaokruhlene_c = roundf(c * 100) / 100; //zaokruhlim nacitane c na 2 des. miesta
|
||||||
|
|
||||||
|
if (zaokruhleny_vysledok == zaokruhlene_c) printf("OK\n"); else printf ("ZLE\n")
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user