62 lines
1.5 KiB
C
62 lines
1.5 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define SIZE 10
|
|
|
|
int main(void) {
|
|
double ulozisko[SIZE];
|
|
int top = 0;
|
|
char vstup[64];
|
|
|
|
while (fgets(vstup, sizeof(vstup), stdin)) {
|
|
vstup[strcspn(vstup, "\n")] = 0;
|
|
|
|
if (strlen(vstup) == 0) {
|
|
printf("no input\n");
|
|
return 0;
|
|
}
|
|
|
|
char *koniec;
|
|
double cislo = strtod(vstup, &koniec);
|
|
|
|
if (*koniec == '\0') {
|
|
if (top >= SIZE) {
|
|
printf("stack full\n");
|
|
return 0;
|
|
}
|
|
ulozisko[top++] = cislo;
|
|
}
|
|
else if (strlen(vstup) == 1 && strchr("+-*/", vstup[0])) {
|
|
if (top < 2) {
|
|
printf("not enough values\n");
|
|
return 0;
|
|
}
|
|
double b = ulozisko[--top];
|
|
double a = ulozisko[--top];
|
|
double vysledok = 0.0;
|
|
|
|
switch (vstup[0]) {
|
|
case '+': vysledok = a + b; break;
|
|
case '-': vysledok = a - b; break;
|
|
case '*': vysledok = a * b; break;
|
|
case '/': vysledok = b == 0 ? (printf("division by zero\n"), exit(0), 0) : a / b; break;
|
|
default: printf("invalid op\n"); return 0;
|
|
}
|
|
|
|
ulozisko[top++] = vysledok;
|
|
}
|
|
else {
|
|
printf("bad input\n");
|
|
return 0;
|
|
}
|
|
|
|
for (int i = 0; i < top; i++)
|
|
printf("%.2f ", ulozisko[i]);
|
|
printf("\n");
|
|
}
|
|
|
|
printf("no input\n");
|
|
return 0;
|
|
}
|