Mình đang làm bài tập về cái tiền tố hậu tố sử dụng thuật toan shunting_yard,nói thật thì cái thuật toán mình hiểu ,viết cũng xong rồi mà chạy lại bị lặp vô hạn.Xem giúp mình với,thanks!

C Code:
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #define max 100
  5.  
  6. typedef struct {
  7.         char datum[100];
  8.         int top;
  9.         }stack;
  10.  
  11.  
  12. int full(stack a){
  13.     if(a.top >= max)
  14.            return 1;
  15.            
  16.      return 0;
  17. }
  18.  
  19. int iEmpty(stack a){
  20.     if( a.top < 0)
  21.         return 1;
  22.        return 0;
  23. }
  24.  
  25. void push(stack a,char text){
  26.      
  27.      if(!full(a)){
  28.                   a.datum[a.top] = text;
  29.                   a.top++;
  30.                   }
  31.                  
  32.      }          
  33.  
  34. char pop(stack a){
  35.      if( !iEmpty(a)){
  36.          char text;
  37.          text = a.datum[a.top];
  38.          a.top--;
  39.          return text;
  40.          }
  41. }
  42.  
  43. int isOperator(char c){
  44.     switch(c){
  45.               case '(':return 1;
  46.                    case ')':return 1;
  47.                         case '+':return 2;
  48.                              case '-':return 2;
  49.                                   case '*':return 3;
  50.                                        case '/':return 3;
  51.                         default:return 0;
  52.               }
  53.              
  54. }
  55.  
  56. stack a;
  57. //a.top =0;
  58. void xuly(char *s){
  59.      a.top = 0;
  60.          if(strlen(s) != 0){
  61.          int i;
  62.          for( i =0; i< strlen(s); i++){
  63.               if(isOperator(s[i]) == 0){
  64.               printf("%c",s[i]);
  65.               }
  66.               else{
  67.                    if(s[i] =='('){
  68.                            char c;
  69.                            push(a,s[i]);
  70.                            while(s[i]!=')'){
  71.                                                    
  72.                    push(a,s[++i]);
  73.                                         }
  74.                    do{
  75.                    c = pop(a);
  76.                    c!=')'?printf("%c",c):printf("");                  
  77.                    }while(c!='(');
  78.                            }
  79.                    else{
  80.                         char c;
  81.                         c = pop(a);
  82.                         if(isOperator(c) <=isOperator(s[i])){
  83.                                          push(a,c);
  84.                                          push(a,s[i]);
  85.                                          }
  86.                         else{
  87.                              while(isOperator(s[i]) < isOperator(c)){
  88.                                                     printf("%c",c);
  89.                                                     c = pop(a);
  90.                                                     }
  91.                                                     push(a,s[i]);
  92.                              }
  93.                         }
  94.                    }
  95.              
  96.               }
  97.                      
  98.        
  99.          }
  100.           while(!iEmpty(a)){
  101.                            char c ;
  102.                            c =pop(a);
  103.                            printf("%c",c);
  104.                            }
  105.                                  
  106.          }
  107.          
  108. int main(){
  109.     char s[]="(a + b -c)";
  110.     printf("Xau vua nhap : %s ",s);
  111.     printf("\n Xau sau khi xu ly : ");
  112.     xuly(s);
  113.     getch();
  114.     return 1;
  115.    
  116.     }