user-0 提问: 括号匹配的栈元素取出问题

回复:
user: user-0
content: 另外，两个功能放在一块为什么会相互影响呢？

user: user-0
content: 多谢指教

user: user-0
content: 没发过帖子，所以发的有点乱，多体谅哈。

user: user-1
content: 问题比较多： 1. 代码比较乱，Status 的返回值，一会返回TRUE or FALSE，一会是OK， ERROR，一会是0 2. 需要返回栈长度的，使用Status作为返回值； 3. 从功能上讲，是字符栈，但是申请空间（加长栈）时申请的是int；两个功能放在一起，互相影响了。 4.  case ')': case ']':少一个break; #include <stdio.h> #include <stdlib.h>  #define STACK_INIT_SIZE 32 #define STACKINCREMENT 10  #define TRUE 1 #define FALSE 0  typedef char SElemType; typedef struct node {     SElemType *base;     SElemType *top;     int stacksize; }Sqstack;  typedef enum ret {     ERROR = -1,        OK = 0, }Status;  //栈的顺序存储表示 Status InitStack(Sqstack *L) {     //构造一个空栈     (*L).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));     if(!(*L).base)         exit(ERROR);     (*L).top = (*L).base;     (*L).stacksize = STACK_INIT_SIZE;      return OK; } Status DestroyStack(Sqstack *L) {     if((*L).top == (*L).base)         return ERROR;     free((*L).base);     (*L).base = NULL;     return OK; } //清空栈 Status ClearStack(Sqstack *L) {     (*L).top = (*L).base;     return OK; } //判断栈是否为空 int IsEmpty(Sqstack *L) {     if((*L).top == (*L).base)         return TRUE;     else         return FALSE; }  int StackLength(Sqstack *L) {      if((*L).top != (*L).base)         return  (*L).top - (*L).base;     else         return 0; }  Status GetTop(Sqstack *L,SElemType *e) {     if((*L).top != (*L).base)         *e = *((*L).top - 1);     return OK; } //插入元素为e的新元素 Status Push(Sqstack *L,SElemType e) {     if((*L).top - (*L).base >= (*L).stacksize)     {         (*L).base = (char *)realloc((*L).base, ((*L).stacksize + STACKINCREMENT) * sizeof(char));         if(!(*L).base)             return ERROR;         (*L).stacksize += STACKINCREMENT;     }     *((*L).top) = e;     (*L).top++;      return OK; }  Status Pop(Sqstack *L,SElemType *e) {     if (!IsEmpty(L))         *e = *(--L->top);     return OK; } //遍历栈中的元素 Status StackTravers(Sqstack *L, void(* vi)(SElemType)) {     if((*L).top == (*L).base)         return ERROR;     while((*L).top > (*L).base)     {         vi(*(*L).base);         (*L).base++;     }     return 0; } #if 0 //算法3.1数制转换 void conversion() {     Sqstack s;     int mod,n,e;     InitStack(&s);//初始化栈     scanf("%d",&n);//等待用户输入     //printf("%d",n);     while(n)//进行8进制的转换     {         mod = n % 8;         n =  n/ 8;         Push(&s,mod);     }     while(!IsEmpty(&s))//输出结果     {         Pop(&s,&e);         printf("%d\n",e);     }     printf("\n"); } #endif //算法3.2.2括号匹配检验 Status check() {     Sqstack s;     char ch[80], *p, e;      if(!InitStack(&s))//初始化栈成功     {         printf("请输入一个表达式：\n");         fgets(ch, 80, stdin);         p = ch;         while (*p)//没有到串尾              switch(*p) {                 case '(':                 case '[':                     Push(&s,*p++);                     break;                  case ')':                 case ']':                     if(!IsEmpty(&s)) {                         Pop(&s,&e);                         if((*p == ')' && e!='(')|| (*p== ']'&& e!= '[')) {                             printf("左右括号不匹配\n");                             exit(ERROR);                         } else {                             p++;                             break;                         }                     } else {                         printf("缺乏左括号\n");                         exit(ERROR);                     }                     break;                  default:                     p++;             }     }     if(IsEmpty(&s))//字符串结束时栈空         printf("括号匹配\n");     else         printf("右括号不匹配\n");     return OK; }   int main() {     check();     return 0; } 头文件不清楚你是怎么定义的，我通过倒推定义了结构体和其他需要宏； 程序运行没问题了。建议自己运行一下～

user: user-2
content: 请问楼主是需求是什么？到底是想干什么？？