栈之表达式求值,该如何解决

栈之表达式求值
小弟这学期学数据结构,期末的课程设计其中一道题是用栈完成表达式求值,半抄半写七七八八搞的差不多了,可是不知道哪里出了问题,输入表达式后就没有输出了
代码如下,请高手不吝赐教:
#include <iostream>
#include <malloc.h>
#include <string>
#include <stdio.h>
using namespace std;

typedef char DataType;
typedef struct SqStack
{
DataType *top;
DataType *base;
int size;
}Stack;

//初始化
void InitStack(Stack *S)
{
S->base=(DataType *)malloc(sizeof(DataType)*20);
if(NULL!=S->base){
S->top=S->base;
S->size = 20;
}
}

//入栈 插入数据
void Push(Stack *S,DataType item){
if(S->top-S->base==S->size-1){
cout<<"您输入的表达式过长,系统无法运算..."<<endl;
exit(-1);
}
else{
++ * (S->top)=item;
}
return;
}

//出栈 取出最顶上的元素
DataType GetTop(Stack *S){
if(S->base==S->top){
exit(-1); //退出
}
else {
return *(S->top);
}
}

//删除 删除栈顶元素,并返回其值
DataType Pop(Stack *S){
if(S->base==S->top){
exit(-1);
} //栈为空 退出
else{
return *(S->top)--;
}
}

//判断是否为运算符
bool In(DataType f){
switch(f){
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
case '#':return true;
default:return false;
}
}

//判断优先关系
char Contrast(DataType s1,DataType s2){
char f;
switch(s2)
{
case '+':
case '-':if(s1 == '(' || s2 == '\n')
f='<';
else 
f='>';
break;
case '*':
case '/':
if(s1 == '*'|| s1 == '/' || s1 == ')')
f = '>';
else 
f='<';
case '(': if(s1 == ')')
{cout<<"括号不匹配" <<endl;
exit(-1);
}
else
f='<';
break;
case ')':
switch(s1)
{
case '(':f = '=';
break;
case '#':
cout<< "缺乏左括号" <<endl;
exit(-1);
default : f= '>';
}
break;
case '#':switch(s1)
{
case '#' :f = '=';
break;
case '(':cout<< "缺少右括号"<<endl;
exit(-1);
default:f = '>';
}

}
return f;
}

//操作
DataType Operate(DataType a,DataType x,DataType b){
switch(x){
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
default :return a/b;
}
}

//表达式求值
DataType Evaluate(){
Stack OPTR,OPND;
DataType a,b,c,x;
InitStack(&OPTR);
InitStack(&OPND);
Push(&OPTR,'#');
c = getchar();
while(c!='#' || (x=GetTop(&OPTR))!='#'){
if(In(c)){
char d;
d=Contrast(x,c);
switch(d){
case '<':
Push(&OPTR,c);
c = getchar();
break;
case '=':
Pop(&OPTR);
c = getchar();
break;
case '>':
b = Pop(&OPND);
a = Pop(&OPND);
x = Pop(&OPTR);
Push(&OPND,Operate(a,x,b));
break;
}
}
else if(c>='0' && c<='9'){
Push(&OPND,c-48); //ASCLL码的转化
c= getchar();
}
else{
cout << getchar()<<endl;
cout << "您输入的字符有误..."<<endl;
exit(-1);
}
}
x = Pop(&OPND);
if((OPND.top!=OPND.base)){
cout<<"表达式不正确...";
exit(-1);
}
return x;
}


void main(){
int result;
cout << "请输入待计算的表达式(以'#'作结尾):" <<endl;
result = Evaluate();
cout<< result << endl;
}

------解决方案--------------------