0

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

}

我收到堆栈下溢错误。

4

2 回答 2

1

如果我尝试用 运行你的程序2 + 3,我会得到下溢。

2 将被推入您的堆栈:

if(isdigit(eval)){
    push((eval-'0'), &infix_stack);
    showStack(&infix_stack);
}

但是,加号将导致这种情况发生:

opr2 = pop(&infix_stack);
opr1 = pop(&infix_stack);

我只是双重弹出,结果出现下溢。您是否为程序提供了有效的后缀输入?

于 2013-10-16T07:02:25.050 回答
0

据我所知,当你得到像“1+2”这样的表达式时,你将“1”推到堆栈上,但是当你遇到“+”时,你会执行弹出“opr2”和“opr1”的“else”逻辑从您的堆栈中 - 但您只将值“1”推入堆栈。尚未遇到值“2”。

于 2013-10-16T07:06:00.613 回答