我在编一个判断括号是否配对的顺序栈题目,已经写的程序如下:

#include<malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define LEN 100
#define LEN2 10
typedef struct Stack
{ char *base;
  char *top;
  int size;
}SqStack;
char e;
char *p;

main()
{  SqStack S;
   char ch;
   S.base=(char *)malloc(LEN * sizeof(char));
   if(!S.base)exit(0);
   S.top=S.base;
   S.size=LEN;
   printf("Please input the char:\n");
   ch=getchar();
   while(ch!=';')
    { p=S.top;
      Push(S,ch);
      S.top++;
      Test(S,ch);
      ch=getchar();
    }
   p=S.base;
    while(p!=S.top) {
     printf("%c",*p);
      p++ ;
        }getch(); 
       exit(0);



}

Push(SqStack S,char e)
{
   if(S.top-S.base>=S.size)
     {  S.base=(char *)realloc(S.base,(S.size+LEN2) * sizeof(char));
        if(!S.base)exit(0);
        S.top=S.base+S.size;
        S.size+=LEN2;
     }

   *S.top=e;

}
Pop(SqStack S,char e)
{
  if(S.top==S.base)return 0;
  e=*--S.top;
  printf("%c\n",e);
  getch();
}
Cheak(SqStack S)
{ if(S.top==S.base)
     { printf("The stack is empty!\n");
       getch();
       return OK;
      }
   else
      { printf("The stack is not empty!\n");
        getch();
        return 0;
       }
}

Test(SqStack S,char e)
{
       if((e=='(')||(e==')')||(e=='[')||(e==']'))


     { if((*p=='('&&*S.top==')')||(*p=='['&&*S.top==']'))
             {Pop(S,e);
              Pop(S,e);}
         else ;
      }

    else
      { Pop(S,e);}


 }

我的思路是:将不符合条件的字符出栈,最后栈S中只剩下括号(有几种情况,这时说明不配对)或什么都不剩(说明括号配对)。不过我发现这个程序的Pop()函数好像没管用,最后S中输出的是所有的入栈元素。麻烦大家帮我找一下怎么回事??