有没有好心人帮我看看 为什么我这个代码不能正确输出值呀
/*输入一个后缀表达式,设计算法计算出表达式的值,表达式长度不能超过一行,以$结束,操作数之间以间隔隔开,操作符只可有+ - * /四种 */
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define maxsize 20
typedef struct stack{
char ch;
struct stack* next;
}stack,*Stack;
Stack S;
void Initstack(Stack &S)
{
S = NULL;
}
void pushstack(Stack& S, char e)
{
Stack p = (Stack)malloc(sizeof(stack));
p->ch = e;
p->next = S;
S = p;
}
int Pop(Stack& S, char* e)
{
if (S == NULL) return ERROR;
*e = S->ch;
Stack p;
p = S;
S = S->next;
delete p;
return OK;
}
int main()
{
Initstack(S);
char elem,e1,e2,e3,e5;
printf("请输入一个整数序列后缀表达式:\n");
for (int i = 0; i < maxsize; i++)
{
scanf_s("%c", &elem);
char k = 0;
if (elem > '0' && elem < '9') k = 0;
if (elem == '+') k = 1;
if (elem == '-') k = 2;
if (elem == '*') k = 3;
if (elem == '/') k = 4;
if (elem == '$') break;
switch (k)
{
case 0:
pushstack(S, elem);
break;
case 1:
Pop(S, &e1);
Pop(S, &e2);
e3 = e1 + e2;
pushstack(S, e3);
break;
case 2:
Pop(S, &e1);
Pop(S, &e2);
e3 = e1 - e2-48-48;
pushstack(S, e3);
break;
case 3:
Pop(S, &e1);
Pop(S, &e2);
e3 = (e1-48) * (e2-48);
pushstack(S, e3);
break;
case 4:
Pop(S, &e1);
Pop(S, &e2);
e3 = (e1-48) / (e2-48);
pushstack(S, e3);
break;
}
}
Pop(S, &e5);
printf("结果为:%d", e5);
return 0;
}