帮我看看代码哈,可以编译,测试不行
功能 输入 1 2 - 4 5 + * 得到 (1-2)+(4+5)
我输入的测试字符是 1 2 - 4 5 + * Ctrl +d 回车
结果没有反映!!!
#include <stdio.h> #include <stdlib.h> #include <ctype.h>#define MAXOP 100#define NUMBER '0'#define MAXVAL 100#define BUFSIZE 100int getop(char []);void push(double);double pop(void);int getch(void);void ungetch(int);char buf[BUFSIZE];int bufp = 0;main(){ int type; double op2; char s[MAXOP]; while((type) == getop(s) != EOF){ switch (type){ case NUMBER: push(atof(s)); break; case '+': push(pop() + pop()); break; case '*': push(pop() * pop()); break; case '-': op2 = pop(); push(pop() - op2); break; case '/': op2 = pop(); if(op2 != 0.0) push(pop() / op2); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n",pop()); break; } } return 0;}int sp = 0;double val[MAXVAL];void push(double f){ if(sp < MAXVAL) val[sp++] = f; else printf("error: stack full,can't push %g\n",f); }double pop(void){ if(sp > 0) return val[--sp]; else{ printf("error: stack empty\n"); return 0.0; }}int getop(char s[]){ int i,c; while((s[0] = c = getch()) == ' ' || c == '\t') ; s[1] = '\0'; if (! isdigit(c) && c != '.') return c; i = 0; if(isdigit(c)) while(isdigit(s[++i] = c = getch())) ; if(c == '.') while(isdigit(s[++i] = c = getch())) ; s[i] = '\0'; if(c != EOF) ungetch(c); return NUMBER; }int getch(void){ return (bufp > 0) ? buf[--bufp] : getchar();}void ungetch(int c){ if(bufp >= BUFSIZE) printf("ungetch: too many characters \n"); else buf[bufp++] = c;}
while((type) == getop(s) != EOF) //此处==得换成= ((type = getop(s)) != EOF