c语言,链表,指针。求大佬指点!谢谢大家了!

题目要求:
1.已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
2.第一行,a、b两个链表元素的数量N、M,用空格隔开。
接下来N行是a的数据
然后M行是b的数据
每行数据由学号和成绩两部分组成
3.按照学号升序排列的数据

我的代码:#include
#include
struct x
{
int xue;
int fen;
struct x *next;
};
int n,m,i,k=100000;

int main()
{
scanf("%d%d",&n,&m);

struct x a[n],b[m],c,*head,*p,*h;
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].xue,&a[i].fen);

}

for(i=0;i<m;i++)
{
scanf("%d%d",&b[i].xue,&b[i].fen);

}

for(i=0;i<n-1;i++)
{
a[i].next=&a[i+1];
}
a[n-1].next=&b[0];
for(i=0;i<m-1;i++)
{
b[i].next=&b[i+1];
}
b[m-1].next=NULL;

for(p=a;(*p).xue!=0;p++)
{
 k=p->xue;
 for(h=p+1;h->xue!=0;h++)
 {
  if(k>(*h).xue)c=*h,*h=*p,*p=c;
 }
}
for(p=a;p->xue!=0;p++)
printf("%d %d\n",p->xue,p->fen);
return 0;

}

错误情况:输出的一部分是乱码
如下(有时候又是第二、三行数据输出正常,第一、四、五行输出乱码):
2 3
2 34
3 45
5 67
4 56
7 89//这一部分是我的输入
2 34
3 45
236528581 4199040
4210712 4210708
1955488802 4199236
请按任意键继续. . .

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问