后缀表达式代码无法输出

#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
typedef char Elemtype;
typedef struct sqstack
{
Elemtype p[maxsize];
int top;
}Sqstack;
void Initstack(Sqstack*&S)
{
S=(Sqstack*)malloc(sizeof(Sqstack));
S->top=-1;
}
void Push(Sqstack *&S,Elemtype e)
{
S->p[S->top]=e;
S->top++;
}
void Pop(Sqstack *&S,Elemtype &e)
{
S->p[S->top]=e;
S->top--;
}
void gettop(Sqstack S,Elemtype &r)
{
r=S->p[S->top];
}
bool stackEmtype(Sqstack S)
{
if(S->top==-1)
return true;
else
return false;
}
void trans(Elemtype exp,Elemtype postexp[20])
{
char e;
Sqstack
Optr;
Initstack(Optr);
int i=0;
while(exp!='\0')
{
switch(exp)
{
case '(':
Push(Optr,'(');
exp++;
break;
case '+':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e!='(')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'+');
exp++;
break;
case '-':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e!='(')
{
postexp[i++]='e';
Pop(Optr,e);
}
else
break;
}
Push(Optr,'-');
exp++;
break;
case '
':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e=='
'||e=='/')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'
');
exp++;
break;
case '/':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e=='
'||e=='/')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'/');
exp++;
break;
default:
while(*exp>='0'&&*exp<='9')
{
postexp[i++]=*exp;
exp++;
}
postexp[i++]='#';
}

}
while(!stackEmtype(Optr))
{
    gettop(Optr,e);
    postexp[i++]=e;
    Pop(Optr,e);
}
postexp[i]='\0';

}
int main()
{
Elemtype postexp[20];
int i=0;
char str[10];
scanf("%s",str);
trans(str,postexp);

printf("%s ",postexp);

}

img

重截图可以看出来,系统运行崩溃了,异常退出
void Pop(Sqstack * &S,Elemtype &e)
{
S->p[S->top]=e;
S->top--;
}
这个Pop函数是错的,应该是e = S->p[S->top];
=======
void gettop(Sqstack * S,Elemtype &r)
{
r=S->p[S->top];
}
这个也不行,应该先检查S->top >= 0才能取值,否则崩溃

你的代码发的太乱了
把你的代码用代码段</>的文本形式重新发一下, 否则代码中*号会被过虑掉

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632