表达式求值的菜单无法做到一个一个输出

想要将以下代码改写成如下的菜单要求,现在的123是一起输出的,有可能做到吗请问,谢谢大家
主控菜单设计要求:程序运行后,显示一个标题“判断表达式括号匹配”,标题下方给出4个菜单项的内容和输入提示:
1.输入表达式
2.输出表达式
3.判断表达式的括号是否匹配并计算表达式的值
4.退出
请选择1—4:
以下为代码:
#include
#include
#include

#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
int exitflag = 1;
typedef int Status;
typedef char SElemType;
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S);//初始化链栈
Status Push(SqStack &S,char e);//入栈
Status Pop(SqStack &S,char *e);//出栈
SElemType GetTop(SqStack S);//返回s的栈顶元素,不修改栈顶指针
Status In(char e);//判断读入字符是否为运算符
SElemType Precede(char a,char b);//判断两运算符优先关系
int Operate(int i,char theta,int j);//做四则运算a theta b,返回运算结果
char EvaluateExpression();//算术表达式求值的算符优先算法
void PrintMenu();
//void Menu(int choice);
int main()
{
int choice = 1;
//LinkStack S;
do
{
PrintMenu();
scanf("%d", &choice);
if (choice == 4) break;
printf("请输入算术表达式,并以#结束(操作数只能是一位数):");
printf("表达式结果是:%d",EvaluateExpression());
} while (exitflag); //实现菜单功能

return 0;

}
//构造一个空栈s
Status InitStack(SqStack *S)
{
S->base=(char )malloc(MAXSIZEsizeof(char));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=MAXSIZE;
return 1;
}
//插入元素e为新的栈顶元素
Status Push(SqStack *S,char e)
{
if(S->top-S->base==S->stacksize) return FALSE;
*S->top++=e;
return TRUE;
}
//删除s的栈顶元素,用e返回其值
Status Pop(SqStack *S,char *e)
{
if(S->top==S->base) return FALSE;
e=--S->top;
return TRUE;
}
//返回s的栈顶元素,不修改栈顶指针
SElemType GetTop(SqStack S)
{
if(S.top!=S.base)
return *(S.top-1);
}

void PrintMenu()
{
printf("\n");
printf("1.(1)输入表达式\n");
printf("(2)输出表达式\n ");
printf("(3)判断表达式的括号是否匹配并计算表达式的值 \n ");
printf("4.退出\n");
printf("请选择 1 或 4:");
}

Status In(SElemType c) //判断c是否为运算符
{
switch(c)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'#':
return TRUE;
default:
return FALSE;
}
}

char Precede(SElemType t1, SElemType t2) //判断两符号的优先关系
{
SElemType f;
switch(t2)
{
case'+':
case'-':
if(t1=='('||t1=='#')
f='<';
else
f='>';
break;
case'':
case'/':
if(t1=='
'||t1=='/'||t1==')')
f='>';
else
f='<';
break;
case'(':
if(t1==')')
{ printf("括号不匹配\n");
exit(OVERFLOW);
}
else
f='<';
break;
case')':
switch(t1)
{
case'(':
f='=';
break;
case'#':
printf("缺乏左括号\n");
exit(OVERFLOW);
default:
f='>';
}
break;
case'#':
switch(t1)
{
case'#':
f='=';
break;
case'(':
printf("缺乏右括号\n");
exit(OVERFLOW);
default:
f='>';
}
}
return f;
}

SElemType Operate(SElemType a,SElemType theta,SElemType b) //做四则运算a theta b,返回运算结果
{
SElemType c;
switch(theta)
{
case'+':
return a+b;
case'-':
return a-b;
case'':
return a
b;
}
return a/b;
}
//算术表达式求值的算符优先算法
char EvaluateExpression()
{

SqStack OPND,OPTR;
int ch;//int choice; 
char a,b,theta,x; 
InitStack(&OPND); //初始化OPND栈,寄存操作数和运算结果
InitStack(&OPTR); //初始化OPTR栈,寄存运算符
Push(&OPTR,'#');
ch=getchar();
while(ch!='#'||GetTop(OPTR)!='#')
{
    printf(" %c\n",ch);
        
    if(!In(ch))//ch不是运算符则进OPND栈
    {
        ch=ch-48;//数字字符转换为对应整数
        Push(&OPND,ch);
        ch=getchar();
    }
    else
    {
        switch(Precede(GetTop(OPTR),ch))
        {//优先级选择
        case '<':
            Push(&OPTR,ch);
            ch=getchar();
            break;
        case '>':
            Pop(&OPTR,&theta);
            Pop(&OPND,&b);
            Pop(&OPND,&a);
            Push(&OPND,Operate(a,theta,b));
            break;
        case '=':
            Pop(&OPTR,&x);
            ch=getchar();
            break;
        }
    }
}
return GetTop(OPND);

}

img

可以做到,用

Sleep()

记得加上whindos.h