后缀表达式求值算法。栈的应用解决方案

后缀表达式求值算法。。。栈的应用
#include<stdio.h>
#include<stdlib.h>
#define StackMaxSize 30

typedef int ElemType;
struct Stack
{
ElemType elem[StackMaxSize];
int top;
}s;

void Push(ElemType x)
{
if(s.top = StackMaxSize - 1)
printf("stack is full!\n");
else
s.elem[++s.top] = x;
}

ElemType Pop()
{
ElemType e;
if(s.top == -1)
printf("stack is empty!\n");
else
e = s.elem[s.top--];
return e;
}

void ExprCompute(char *str)
{

char ch;
int i = 0, x;
ch = str[i++];
while(ch != '@')
{
switch(ch)
{
case '+':
x = Pop() + Pop();
break;
case '-':
x = Pop();
x = Pop() - x;
break;
case '*':
x = Pop() * Pop();
break;
case '/':
x = Pop();
if(x != 0)
x = Pop() / x;
else
{
printf("Divided by 0 !\n");
exit(1);
}
break;
default:
x = ch - 30;
break;
while(str[i] >= '0' && str[i] <= '9')
{
x = x * 10 + str[i] - 30;
i++;
}
}
Push(x);
ch = str[i++];
}

if(s.top > -1)
{
x = Pop();
if(s.top == -1)
return ;
else
{
printf("expression error !\n");
exit(1);
}
}
else
{
printf("Stack is empty!\n");
exit(1);
}
}

void main()
{
s.top = -1;
char str[20];
printf("please input a string ended with a @:");
gets(str);
for(int i = 0;str[i] != '@'; i++)
{
ExprCompute(str);
}
}

出啥错了?、求助

------解决方案--------------------
C/C++ code
#include<stdio.h>
#include<stdlib.h>
#define StackMaxSize 30

typedef int ElemType;
struct Stack
{
    ElemType elem[StackMaxSize];
    int top;
}s;

void Push(ElemType x)
{
    if(s.top ==StackMaxSize - 1)  //判断错误 
        printf("stack is full!\n");
    else
        s.elem[s.top++] = x;      //
}

ElemType Pop()
{
    ElemType e;
    if(s.top == -1)
        printf("stack is empty!\n");
    else
        e = s.elem[s.top--];
    return e;
}

void ExprCompute(char *str)
{    
    
    char ch;
    int i = 0, x;
    ch = str[i++];
    while(ch != '@')
    {
        switch(ch)
        {
        case '+':
            x = Pop() + Pop();
            break;
        case '-':
            x = Pop();
            x = Pop() - x;
            break;
        case '*':
            x = Pop() * Pop();
            break;
        case '/':
            x = Pop();
            if(x != 0)
                x = Pop() / x;
            else
            {
                printf("Divided by 0 !\n");
                exit(1);
            }
            break;
        default:
            x = ch - 48;   //
            break;
            while(str[i] >= '0' && str[i] <= '9')
            {
                x = x * 10 + str[i] - 48;             //
                i++;
            }
        }
        Push(x);
        ch = str[i++];
    }
    
    if(s.top > -1)
    {
        x = Pop();
        if(s.top == -1)
            return ;
        else
        {
            printf("expression error !\n");
            exit(1);
        }
    }
    else
    {
        printf("Stack is empty!\n");
        exit(1);
    }
}

void main()
{
    s.top = -1;
    char str[20];
    printf("please input a string ended with a @:");
    gets(str);
    
    ExprCompute(str);

}