找不出跳出循环的原因
描述:老师想知道考勤情况,让三个班的学生依次到讲台上录入自己的学号,再对三个班学生登录的学号进行整合排序,以便登记;要求:全部使用顺序表操作;每個班人數不多於30人;
输入:若干学号,三个班之间的数据用0隔开;
输出:各个班学生录入的学号,整合排序好的列表,以及人数;
#include<stdio.h>
typedef struct ass
{
int data[90];
int last;
}sch;
void intput(sch *cla)//输出线性表
{
int n,a=0;
sch *p;
p=cla;
scanf("%d",&p->data[a]);
for(a=1,p->last=0;n!=0;a++)
{scanf("%d",&p->data[a]);p->last++;if(p->data[a]==0)break;}
}
void queue(sch *head)//线性表的排列
{
int a,b,c,d,temp,min;
for(a=0;a<head->last-1;a++)
{
min=a;
for(b=a+1;b<head->last;)
{
if(head->data[min]>head->data[b])
min=b;
temp=head->data[a];
head->data[a]=head->data[min];
head->data[min]=temp;
}
}
}
void output(sch *p)//创建线性表
{
int i,j,k;
for(i=0;i<p->last;i++)
printf("%d\n",p->data[i]);
}
int main()//先求三个班的学生,然后再整合在一个线性表
{
int i,j,k,l,u=0;
sch cla_1,cla_2,cla_3,all,*p,*q,*s,*r;
p=&cla_1;
q=&cla_2;
s=&cla_3;
r=&all;
r->last=0;
printf("请1班学生输入学号:\n");
intput(p);
k+=p->last;
for(i=0;i<p->last;i++)
{r->data[u]=p->data[i];u++;r->last++;}
printf("请2班学生输入学号:\n");
intput(q);
k+=q->last;
for(i=0;i<q->last;i++)
{r->data[u]=q->data[i];u++;r->last++;}
printf("请3班学生输入学号:\n");
intput(s);
k+=s->last;
for(i=0;i<s->last;i++)
{r->data[u]=s->data[i];u++;r->last++;}
queue(p);
output(p);
return 0;
}