栈实现四则运算求助

[复制链接]
查看11 | 回复1 | 2021-1-27 05:27:05 | 显示全部楼层 |阅读模式
大佬们,我现在在做一个用栈实现四则运算求值的程序,但是现在不论我输什么表达式进去,得出来的答案都是随机的数字,可以帮我看一下哪里有问题,该怎么改进吗

#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]=//显示算符优先关系的二维数组
{
/*'+''-''*''/''('')''#'*/
/*'+'*/'>','>','','>',
/*'-'*/'>','>','','>',
/*'*'*/'>','>','>','>','','>',
/*'/'*/'>','>','>','>','','>',
/*'('*/'','>','>','>','','>','>',
/*'#'*/'
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
typedefcharOperandType;//运算类型你怎么能用char去定义一个answer呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行