可以输入 但没有输出 等好久也没有

主函数

/*
程序运行时,输入合法的算术表达式(中间值及最终结果要在0~9之间,可以包括加减乘除和括号),便可输出相应的计算结果。
*/
#include<stdio.h>
#include"stack.h"
int main()
{
     printf("请输入算术表达式(中间值及最终结果要在0-9之间),并以#结束\n");
     printf("运算结果为:%f\n",EvaluateExpression());
     return 0;
 } 

.h



#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define True 1
#define False 0
#define OVERFLOW -2
#define OK 1
#define ERROR -1
typedef char SElemType;

typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack; 
int InitStack(SqStack &S);
int Push(SqStack &S,SElemType e);
int Pop(SqStack &S,SElemType &e);
int GetTop(SqStack S,SElemType &e);



int In(char c);//判断c是否为运算符 
int Precede(char t1,char t2);//判断运算符t1 t2的优先级 
int Operate(int a,char theta,int b);//对a和b进行二元运算theta 
//OperandType EvaluateExpression();
char EvaluateExpression();
#include<stdio.h>
#include"stack.h"
#include<stdlib.h>
#include<malloc.h> 
int In(char c)//判断c是否为运算符 
{
    switch(c){
        case'+':
            return True;
        case'-':
             return True;
        case'*':
             return True;
        case'/':
             return True;
        case'=':
             return True;
        case'(':
             return True;
        case')':
             return True;
        case'#':
              return OVERFLOW;     
        default: return False;                                   
    }
}

int Precede(char t1,char t2)//判断运算符t1 t2的优先级 
{
    int i,j;
    char pre[][7] = {
            //将运算符之间的优先级制作成一张表格
            {'>', '>', '<', '<', '<', '>', '>'},
            {'>', '>', '<', '<', '<', '>', '>'},
            {'>', '>', '>', '>', '<', '>', '>'},
            {'>', '>', '>', '>', '<', '>', '>'},
            {'<', '<', '<', '<', '<', '=', '0'},
            {'>', '>', '>', '>', '0', '>', '>'},
            {'<', '<', '<', '<', '<', '0', '='}
    };

    /*if(t2=='+')
    {
        if(t1=='('||t1=='#')    return '<';
        return '>';
    }
    if(t2=='-')
    {
        if(t1=='('||t1=='#')    return '<';
        return '>';
    }
    if(t2=='*')
    {
        if(t1=='*'||t1=='/'||t1==')')    return '>';
        return '<';
    }
    if(t2=='/')
    {
        if(t1=='*'||t1=='/'||t1==')')    return '>';
        return '<';
    }
    if(t2=='(')    return '<';
    if(t2==')')
    {
        if(t1=='(')    return '=';
        return '>';
    }
    if(t2=='#')
    {
        if(t1=='#')    return '=';
        return '>';
    }
    */
    switch (t1) {
        case '+':
            i = 0;
            break;
        case '-':
            i = 1;
            break;
        case '*':
            i = 2;
            break;
        case '/':
            i = 3;
            break;
        case '(':
            i = 4;
            break;
        case ')':
            i = 5;
            break;
        case '#':
            i = 6;
            break;
        default:
            return OVERFLOW;
    }
    switch (t2) {
        case '+':
            j = 0;
            break;
        case '-':
            j = 1;
            break;
        case '*':
            j = 2;
            break;
        case '/':
            j = 3;
            break;
        case '(':
            j = 4;
            break;
        case ')':
            j = 5;
            break;
        case '#':
            j = 6;
            break;
        default:
            return OVERFLOW;
    }
    return pre[i][j];


 } 

int Operate(int a,char theta,int b)//对a和b进行二元运算theta 
{
    switch(theta){
        case'+':
           return a+b;
        case'-':
            return a-b;
        case'*':
            return a*b;
        case'/':
            return a/b;             
    }
}
int InitStack(SqStack &S)
{
    S.base=(SElemType *)malloc(STACK_INT_SIZE *sizeof(SElemType));
    if(!S.base) exit(OVERFLOW);//存储分配失败
    S.top=S.base;
    S.stacksize= STACK_INT_SIZE;//初始容量 
    return OK; 
}

int Push(SqStack &S,SElemType e)
{
    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;
    return OK;
}

int Pop(SqStack &S,SElemType *e)
{
    if(S.top==S.base)   return ERROR;
    *e=*--S.top;
    return OK;
}

int GetTop(SqStack S,SElemType &e)
{
    if(S.top==S.base) return ERROR;
    e=*(S.top-1);
    return OK;
}
//OperandType EvaluateExpression()
char EvaluateExpression()
{
    SqStack OPTR;
    SqStack OPND;
    char c,x,a,b,theta,e;
    InitStack(OPTR);//运算符栈 
    Push(OPTR,'#');
    InitStack(OPND);//运算数栈 
    c=getchar();//接受字符
    
    while(c!='#'||GetTop(OPTR,e)!='#')
    {
        if(!In(c)){
            Push(OPND,c-'0');
            c=getchar();
        }
        else 
            switch(Precede(GetTop(OPTR,e),c))
            {
                case'<':
                    Push(OPTR,c);
                    c=getchar();
                    break;
                case'=':
                     Pop(OPTR,&x);
                    c=getchar();
                    break;
                case'>':
                    Pop(OPTR,&theta);
                    Pop(OPND,&b);
                    Pop(OPND,&a);
                    Push(OPND,Operate(a,theta,b));
                    break;
             } 
     } 
     return GetTop(OPND,e);
}

case'<'
case'='
case'>'
这些case 与'<'符号之间没有空格,连在一起了吧?