看下面那个Precede函数哪里出了问题,不能输出!
 #define STACK_INIT_SIZE 100
#include "stdio.h"
#include "stdlib.h"
int i,j;
char a[7]={'+','-','*','/','(',')','#'};
char b[7][7]={
               {'>','>','<','<','<','>','>'},
               {'>','>','<','<','<','>','>'},
               {'>','>','>','>','<','>','>'},
               {'>','>','>','>','<','>','>'},
               {'<','<','<','<','<','=',' '},
               {'>','>','>','>',' ','>','>'},
               {'<','<','<','<','<',' ','='}
               };
typedef struct
  {
      int *base;
      int *top;
      int  stacksize;
   }  *SqStack_I;
typedef struct
  {
      char *base;
      char *top;
      int  stacksize;
   }  *SqStack_C;
SqStack_I InitStack_I()
  {
      SqStack_I S;
      S->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
      S->top=S->base;
      S->stacksize=STACK_INIT_SIZE;
      return S;
   }
SqStack_C InitStack_C()
  {
      SqStack_C S;
      S->base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
      S->top=S->base;
      S->stacksize=STACK_INIT_SIZE;
      return S;
   }
SqStack_I Push_I(SqStack_I S,char e)
  {   int w;
      w=e-48;
      *S->top++=w;
      return S;
   }
SqStack_C Push_C(SqStack_C S,char e)
  {
      *S->top++=e;
      return S;
   }
int Pop_I(SqStack_I S)
  {
      int e;
      e=*--S->top;
      return e;
   }
char Pop_C(SqStack_C S)
  {
      char e;
      e=*--S->top;
      return e;
   }
int GetTop_I(SqStack_I S)
  {
      int e;
      e=*(S->top-1);
      return e;
   }
char GetTop_C(SqStack_C S)
  {
      char e;
      e=*(S->top-1);
      return e;
   }
int In(char c)
  {if(c<='9'&&c>='0') return 1;
     else  return 0;
   }
char Precede(char d,char c)
  {   int m,n;
      for(i=0;i<7;i++)
         if(d==a[i])  m=i;
       printf("%d",m);
      for(j=0;j<7;j++)
         if(c==a[j])   n=j;             /*printf("%d",n);*/
      /*printf("%d,%d",i,j); */
      return b[m][n];
     /* printf("%c",b[i][j]);*/
   }
int Operate(int a,char theta,int b)
  {
      if (theta=='+')  return (a+b);
      if (theta=='-')  return (a-b);
      if (theta=='*')  return (a*b);
      if (theta=='/')  return (a/b);
   }
main()
  {
      int x,y;
      char c,theta;
      SqStack_C OPTR;
      SqStack_I OPND;
      OPTR=InitStack_C();
      Push_C(OPTR,'#');
      /*printf("%c",GetTop_C(OPTR));*/
      OPND=InitStack_I();
      c=getchar();
 Precede('#','+');
      while (c!='#'||GetTop_C(OPTR)!='#')
        {if(In(c)) {Push_I(OPND,c);c=getchar();/*printf("%d\n",GetTop_I(OPND));*/}
           else
             switch (Precede(GetTop_C(OPTR),c))
               {  /*printf("%c",GetTop_C(OPTR));*/
                  /*printf("%c",Precede(GetTop_C(OPTR),c));*/
                  case'<': Push_C(OPTR,c); c=getchar(); break;
                  case'=': Pop_C(OPTR);  c=getchar();   break;
                  case'>': theta=Pop_C(OPTR);
                           x=Pop_I(OPND);  y=Pop_I(OPND);
                           Push_I(OPND,Operate(x,theta,y)+48);
                           break;
                }
         }
      printf("%d\n",GetTop_I(OPND));
      getchar();
      getchar();
}

											