我正在尝试编写一个程序来评估C中的后缀表达式,这是我写的程序,但我似乎得到了一个堆栈下溢错误。
int evaluate(char a[]){
int i = 0, opr1, opr2, res;
int eval;
struct stack infix_stack;
init(&infix_stack); //Initialize stack top to -1.
for(i = 0; (eval=a[i])!='\0'; i++){
if(isdigit(eval)){
push((eval-'0'), &infix_stack);
showStack(&infix_stack);
}
else{
opr2 = pop(&infix_stack);
opr1 = pop(&infix_stack);
switch (a)
{
case '+':return(b+c);break;
case '-':return(b-c);break;
case '*':return(b*c);break;
case '/':return(b/c);break;
default:
printf("Unknown operator\n");
return 0;
break;
}
}
}
return(res = pop(&infix_stack));
}
我收到了堆栈下溢错误。
答案 0 :(得分:1)
如果我尝试使用2 + 3
运行您的程序,我会下流。
2将被推到你的筹码上:
if(isdigit(eval)){
push((eval-'0'), &infix_stack);
showStack(&infix_stack);
}
然而,加号将导致这种情况发生:
opr2 = pop(&infix_stack);
opr1 = pop(&infix_stack);
我只是双重弹出,结果导致下溢。你给程序有效的后缀输入吗?
答案 1 :(得分:0)
据我所知,当你得到像“1 + 2”这样的表达时 你将“1”推到你的堆栈上但是当你遇到“+”时你执行你的“其他”逻辑,从你的堆栈中弹出“opr2”和“opr1” - 但你只是将值“1”推到了堆栈。尚未遇到值“2”。