表达式求值程序运行输入没反应?

#include
#include
#include
#define thestacksize 100
#define stackincrement 10
#define overflow -1
#define ok 1
#define error 0
typedef struct{
char top;
char *base;
int stacksize;
}sqstack;
int initstack(sqstack *s){
s->base=(char
)malloc(thestacksize*sizeof(char));
if(!s->base)exit(overflow);
s->top=s->base;
s->stacksize=thestacksize;
return ok;
}
int gettop(sqstack s){
char e;
if(s->top==s->base)return error;
e=
(s->top-1);
return ok;
}
int push(sqstack s,char e){
if(s->top-s->base>=s->stacksize){
s->base=(char
)realloc(s->base,(s->stacksize+stackincrement)*sizeof(char));
if(!s->base)exit(overflow);
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
}
s->top++=e;
return ok;
}
int pop(sqstack *s,char e){
if(s->top==s->base)return error;
e=
--s->top;
return ok;
}
char precede(char p1,char p2){
char p[7][7] = {{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'<', '<', '<', '<', '<', '=', ' '},
{'>', '>', '>', '>', ' ', '>', '>'},
{'<', '<', '<', '<', '<', ' ', '='}};
int r,l;
r=0;
l=0;
switch(p1){
case'+':
r=1;
break;
case'-':
r=2;
break;
case'*':
r=3;
break;
case'/':
r=4;
break;
case'(':
r=5;
break;
case')':
r=6;
break;
case'#':
r=7;
break;
default:
break;
}
switch(p2){
case'+':
l=1;
break;
case'-':
l=2;
break;
case'*':
l=3;
break;
case'/':
l=4;
break;
case'(':
l=5;
break;
case')':
l=6;
break;
case'#':
l=7;
break;
default:
break;
}
return (p[r][l]);
}
int ifoptr(char c){
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')return ok;
else return error;
}
int operate(int a,char p,int b){
switch(p){
case'+':
return(a+b);
break;
case'-':
return(a-b);
break;
case'*':
return(a*b);
break;
case'/':
return(a/b);
break;
default:
break;
}
}
int evaluateexpression(char e){
char p,c;
int a,b;
sqstack optr;
sqstack opnd;
initstack(&optr);
initstack(&opnd);
push(&optr,'#');
c=getchar();
while(c!='#'||gettop(&optr)!='#'){
if(!ifoptr(c)){push(&opnd,c);c=getchar();}
else
switch(precede(gettop(&optr),c)){
case'<':
push(&optr,c);
c=getchar();
break;
case'=':
pop(&optr,p);c=getchar();
break;
case'>':
pop(&optr,p);
pop(&opnd,a);
pop(&opnd,b);
push(&opnd,operate(a,p,b));
break;
default:
break;
}
}
e=gettop(&opnd);
return e;
}
int main() {
char e;
printf("input an expression (end with '#'):\n");
evaluateexpression(e);
printf("result:\n");
printf("%d\n",e);

}
如题。。之前已经问过这个程序的问题,也按照一些意见后做过修改后可以运行成功了但是输入表达式后例如1+2#回车后无反应,请教各位原因在哪里?本人初学者,理解可能有些愚钝,多谢大家的包涵了!

(1)上次和你说的问题,变量初始化,你仍然我行我素根本没改
(2)
int operate(int a, char p, int b){
你调试下就发现,操作符根本没获取到,导致while那个死循环。

别的就不看了。