#include #include #include #include #include #include "stack.h" char *readword(FILE *f) { if (getc(f) == EOF) return NULL; fseek(f, -1, SEEK_CUR); char *word = malloc(10); char c; int i = 0; while ((c = getc(f)) != ' ') { if (c == EOF || c == '\n') break; word[i] = c; i++; } word[i] = 0; return word; } int main() { FILE *f = fopen("test.rpn", "r"); stack *s = initstack(0 ,100); char *word; int a, b; while ((word = readword(f)) != NULL) { if (!isdigit(word[0])) { b = pop(s); a = pop(s); switch (word[0]) { case '+': push(s, a+b); break; case '-': push(s, a-b); break; case '*': push(s, a*b); break; case '/': push(s, a/b); break; case '^': push(s, pow(a, b)); break; case '~': push(s, a); push(s, -b); break; default: printf("unknown symbol %c\n",word[0]); exit(1); break; } } else push(s, atoi(word)); free(word); } printf("%d\n", pop(s)); deinitstack(s); }