为什么我推入STACK后数据变了?

Why the data changed after I push the data in STACK?

这是我的 Postfix Notation 函数代码。好吧,我测试了几个案例,大多数都运行良好。 但是,下面这个案例 returns 错误的答案。我不知道我的代码哪一个是错的。

=> 输入数据前 100 行 11 3 3 * 3 * 3 * 3 * 3 *

=> 解决方案数据前 100 行 729

=> 用户输出前 100 行 -39

我调试了几次,发现tmp推到STACK后变成了“-13”(tmp计算结果为243时)

M的取值范围为(3≤M≤11)。

#include <stdlib.h>
int M;
int STACK[13];
int ans, Sp;

void push(char c) {
    STACK[Sp++] = c;
}

int pop() {
    int n = STACK[--Sp];
    STACK[Sp] = NULL;

    return n;
}

int main() {
    int i, j, n1, n2, tmp; 
    char op;
    scanf("%d", &M);

    for (i = 0; i < M; i++) {
        scanf(" %c", &op);

        switch (op)
        {
        case '+':
            n1 = pop();
            n2 = pop();
            tmp = n1 + n2;
            break;

        case '*':
            n1 = pop();
            n2 = pop();
            tmp = n1 * n2;
            break;

        case '-':
            n1 = pop();
            n2 = pop();
            tmp = n2 - n1;
            break;

        case '/':
            n1 = pop();
            n2 = pop();
            tmp = n2 / n1;
            break;
        default:
            tmp = op - '0';
            break;
        }
        push(tmp);
    }

    ans = pop();

    printf("%d", ans);
    return 0;
}

您的 push 函数声明为:

void push(char c)

注意参数 cchar.

如果 char 是有符号的,那么它不能处理像 243 这样大的值,它的范围只能达到 127(如果使用二进制补码)。

你应该使参数成为 int:

void push(int c)