这个程序为啥运行不对呢?(括号匹配的判断)

提问:这个程序为啥运行不对呢?(括号匹配的判断)

网友回答:

你程序有多个错(你对指针的理解有问题)

1。

struct stack *s; initstack(&s);

这样你的s是二级指针了,且它没有初始化

你的void initstack(stack *s)就完全不对了

正确的要用

void initstack(stack **s)

且*s要初始化的

*s=(stack *)malloc(sizeof(stack));

后面的也全要改的

   (*s)->top  =(char*)malloc((100)*sizeof(char)); (*s)->base =(*s)->top   ; (*s)->stacksize  =100;

2。

你既然定义了typedef struct,那说不要用struct stack *s;而是用stack *s;了

3。

你的match(&s);也错了,s已经是指针了,只要match(s);就可以了

4。你的

void pop(stack *s,char e)

它不会改e的错的(这个是基础),你要用指针的,改为

void pop(stack *s,char e)

然后调用时改

pop(s,e);

pop(s,&e);

5。程序中两处elseif应该是else if (可能是复制的问题)


完整改好的可运行的

#include #include #include typedef struct { int stacksize; char *top; char *base; } stack; void initstack(stack **s) { *s=(stack *)malloc(sizeof(stack));    (*s)->top  =(char*)malloc((100)*sizeof(char)); (*s)->base =(*s)->top   ; (*s)->stacksize  =100; } void push(stack *s,char e) { *s->top  =e; s->top++; } void pop(stack *s,char *e) { s->top--; *e=*s->top; } int panduan(char a,char b) { if(a=='('&&b==')') return 0; else if(a=='{'&&b=='}') return 0; else if(a=='['&&b==']') return 0; else return 1; } int match(stack *s) { char c,e; c=getchar(); while(c!='#') { if(c=='('||c=='{'||c=='[') push(s,c); if(c==')'||c=='}'||c==']') { if(s->top ==s->base ) { printf("不匹配"); return 0; } else pop(s,&e); if(panduan(e,c)) { printf("不匹配"); return 0; } } c=getchar(); } if(s->top ==s->base ) printf("匹配"); else printf("不匹配");    return 1; } int main() {    stack *s; initstack(&s); match(s); }

相关推荐

奥拉星怎样玩的厉害

在奥拉星上怎样打败厉害Boos,获得厉害宠物先去捕捉一些铁甲卫士镰刀有恶魔遗言这个技能,把他练到50级,在练一些守卫者和主宠到100级真样慢慢练最好去的寒冰公主,年到一百级,用聚

这个程序的bag是啥呀

这个程序的bag是啥呀

这个程序的运行结果是?

这个程序的运行结果是?

这个程序是什么意思,有C语言对大佬给解释一

这个程序是什么意思,有C语言对大佬给解释一

这个程序为什么运行不了,在线等

这个程序为什么运行不了,在线等

这个程序中的%c\n是什么意思,ch=65为什么判为A

这个程序中的%c\n是什么意思,ch=65为什么判为A

这个程序有什么问题

这个程序有什么问题

这个程序为什么一直结果都是0

这个程序为什么一直结果都是0

这个程序能给R[]赋值,请教:把R改成二维数组为何就不行了?请大神指教。

这个程序能给R[]赋值,请教:把R改成二维数组为何就不行了?请大神指教。

c语言中,这个程序的结果为什么是7

c语言中,这个程序的结果为什么是7

java这个程序为什么导出来的a是42

java这个程序为什么导出来的a是42

请问《画图》这个程序的撤销键在哪?

请问《画图》这个程序的撤销键在哪?

请问这个程序哪里有错误

请问这个程序哪里有错误

帮忙看一下这个程序里的bug,想不通。

帮忙看一下这个程序里的bug,想不通。

请问在广数980车床上怎么样编这个程序

请问在广数980车床上怎么样编这个程序

盒子游戏,游戏玩家专属个性阅读社区


©CopyRight 2010- 2020 BOXUU.COM Inc All Rights Reserved

鄂公网安备 35020302000061号- 鄂ICP备2020015574号-1