#include<stdlib.h>
#include<string.h>
typedef struct sta
{
char *base;
char *top;
int stacksize;
}stack;
stack InitStack (stack p,int n)
{
p.stacksize =n+1;
p.base = (char *)malloc(p.stacksize * sizeof(char));
if (p.base== NULL)
{
printf("初始化栈失败\n");
exit(0);
}
p.top = p.base;
return p;
}
stack push(stack p,char e[20])
{
if(p.top-p.base>=p.stacksize)
{
printf("社团人数已满,接下来输入学生将进入等待序列");
return p;
}
*p.top=e[20];
p.top++;
return p;
}
int stackfull(stack p)
{
if(p.top-p.base>=p.stacksize)
return 0;
else
return p.top-p.base;
}
char Pop (stack p)
{
if (p.base==p.top)
{
printf("栈为空栈,无法出栈 ");
exit(0);
}
p.top--;
return *p.top;
}
void DisplyStack (stack p)
{
if (p.base==p.top)
{
printf("栈为空栈,无法遍历\n");
return;
}
printf("栈中元素为:");
printf("顶端[");
while (p.top != p.base)
{
p.top--;
printf("%s-", *p.top);
}
printf("]底端\n");
}
int main()
{
stack p[20],q;int n,i,m,k;
printf("输入社团总数\n");
scanf("%d",&i);
printf("输入每个社团的最大人数\n");
scanf("%d",&n);
p[20].stacksize=n+1;
q.stacksize=1000;
q=InitStack(q,1000);
for(m=0;m<i;m++)
{
char name[20];int d,u;
p[m]=InitStack(p[m],n);
printf("输入第%d个社团名称",m);
scanf("%s",name);
p[m]=push(p[m],name);
printf("输入拟加入第%d个社团的学生人数",m);
scanf("%d",&u);
printf("输入加入第%d个社团的学生名称",m);
for(d=0;d<n;d++)
{
gets(name);
p[m]=push(p[m],name);
}
if(u>n)
{
for(d=0;d<u-n;d++)
{
gets(name);
q=push(q,name);
}
}
}
if(q.top-q.base>0)
{
int y,b;char s[20];
printf("以下社团有空位");
for(m=0;m<i;m++)
{
if(stackfull(p[m])>0)
{
printf("%d,",m);
puts(p[m].base);
}
}
for(y=0;y<q.top-q.base;y++)
{
printf("请选择新社团加入,输入社团前的数字");
scanf("%d",&b);
s[20]=Pop(q);
p[b]=push(p[b],s);
}
}
for(m=0;m<i;m++)
{
DisplyStack (p[m]);
}
}
应该是指针方面的问题,但是你代码没有贴对,for(m=0;m { 这都是什么鬼。
没法帮你调试。你自己认真调试下吧。