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 に答える