运用栈计算多项式时结果出现错误

用栈计算多项式
拿到的代码是定义了一个int栈,一个char栈,想试着只用一个char栈做出来
代码:


//定义一个字符栈 
typedef struct
{
    char elem[Stack_Size];
    int top;
}seqstack;
 
//栈的初始化 
seqstack *initStack()
{
    seqstack *s;
    s = (seqstack*)malloc(sizeof(seqstack));
    s->top = -1;
    return s;
}

int push(seqstack *S,char x)
{
    if(S->top==Stack_Size-1)
        return 0;
    S->top++;
    S->elem[S->top]=x;
    return 1;
}

int pop(seqstack *S,char *x)
{
    if(S->top==-1)
        return 0;
    else
    {
        *x = S->elem[S->top];
        S->top--;
        return 1;
    }
}

 char gettop(seqstack *S)
 {
     if(S->top==-1)
         return '#';
     else
     {
         
         return (S->elem[S->top]);
     }
 }
 
 char compare(char a,char b)
 {
     if(a=='+'||a=='-')
         if(b=='+'||b=='-'||b==')'||b=='#')
             return '>';
         else
             return'<';
     if(a=='*'||a=='/')
         if(b=='(')
             return '<';
         else
             return '>';
     if(a=='(')
         if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
             return '<';
         else if(b==')')
             return '=';
     if((a==')')&&(b!='('))
         return '>';
     if(a=='#'&&b!=')')
         if(b=='=')
             return '=';
         else
             return '<';
 }
 
 int Op(int m,int n,char op)
 {
     if(op=='+')
         return m+n;
     if(op=='-')
         return n-m;
     if(op=='*')
         return m*n;
     if(op=='/')
         return m/n;
 }
 
 void Exp(char *s,int *l)
 {
    seqstack *OPRD =  initStack();//数字栈 
    seqstack *OPTR =  initStack();//符号栈 
    char ch,x,op;
    int M,N;
    int c,data,val,i = 0;
    char m,n;
    push(OPTR,'#');
    c = strlen(s);
    while(i<c)
    {
        ch = s[i];
        if(ch>='0'&&ch<='9')
        {
            data = s[i]-'0';
            ++i;
            while(s[i] >= '0'&&s[i]<='9')
            {
                data = data*10+s[i]-'0';
                ++i;
            }
            ch = s[i];
            push(OPRD,data);
        }
        else
        {
            switch(compare(gettop(OPTR),ch))
            {
            case '<':push(OPTR,ch);
                ch = s[++i];break;
            case '=':pop(OPTR,&x);
                ch = s[++i];break;
            case '>':
                pop(OPTR,&op);
                pop(OPRD,&m);
                M=m-'0';
                pop(OPRD,&n);
                N=n-'0';
                val = Op(M,N,op);
                push(OPRD,val);
                break;
            }
        }
    }
    val = gettop(OPRD);
    *l = val;
 }
int main()
{
    char s[MAXLEN];
    int l;
    cout<<"写一个带有“+”、“-”、“*”、“/”、“)”、“(”等符号的复杂式子,并于式子末尾加上“#”:"<<endl;
    gets(s);
    Exp(s,&l);
    cout<<"答案是:"<<l<<endl;

    system("pause");
    return 0;
}

因为都是char栈,所以取数字栈栈顶的时候做了一步转换。程序没有报错,但是计算1+1时结果变为-94,1*1结果为-95,想问这个程序哪里出了问题

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。