大佬们,我现在在做一个用栈实现四则运算求值的程序,但是现在不论我输什么表达式进去,得出来的答案都是随机的数字,可以帮我看一下哪里有问题,该怎么改进吗
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefcharSElemType;
typedefintStatus;
typedefcharOperandType;//运算类型
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack*S)//构造空栈
{
S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base)exit(OVERFLOW);
S->top=S->base;
S->stacksize=STACKINCREMENT;
returnOK;
}
StatusPush(SqStack*S,SElemTypee)//入栈
{
if(S->top-S->base>=S->stacksize)
{
S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base)exit(OVERFLOW);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
returnOK;
}
StatusPop(SqStack*S,SElemType*e)//出栈
{
if(S->top==S->base)returnERROR;
*e=*--S->top;
returnOK;
}
SElemTypeGetTop(SqStack*S,SElemType*e)//得到栈顶元素
{
if(S->top==S->base)
{
returnERROR;
}
*e=*(S->top-1);
returnOK;
}
OperandTypeEasyoperate(OperandTypea,OperandTypeb,OperandTypetheta)//计算简单的运算
{
OperandTypeanswer;
switch(theta)
{
case'+':
answer=a+b;
returnanswer;break;
case'-':
answer=a-b;
returnanswer;break;
case'*':
answer=a*b;
returnanswer;break;
case'/':
answer=a/b;
returnanswer;break;
}
}
charCompare(chara,charb)//判断算符优先级
{
inti,j;
charprior[7][7]=//显示算符优先关系的二维数组
{
/*'+''-''*''/''('')''#'*/
/*'+'*/'>','>','','>',
/*'-'*/'>','>','','>',
/*'*'*/'>','>','>','>','','>',
/*'/'*/'>','>','>','>','','>',
/*'('*/'','>','>','>','','>','>',
/*'#'*/'
分 -->
|