C中的后缀评估

时间:2013-10-16 06:57:31

标签: c stack

我正在尝试编写一个程序来评估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));

}

我收到了堆栈下溢错误。

2 个答案:

答案 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”。