当前位置: 代码迷 >> C语言 >> 结构体问题
  详细解决方案

结构体问题

热度:112   发布时间:2006-04-22 13:27:00.0
结构体问题

求助:如下程序是要从链表a中删去与b链表中有相同学号的那些结点, 编译连接都成功了 ,但是运行完printf("\n result:\n");后,就终止了,查找后知道此时的p1已经指向0X00000000,所以没有执行最后得while语句,但为什么
p1指向0X00000000 了呢
#define LA 4
#define LB 5
#define NULL 0
#include<stdio.h>

struct student
{ char num[6];
char name[8];
struct student *next;
}a[LA],b[LB];

main()
{ struct student a[LA]={("101","wang"},{"102","li"},{"105","zhang"},{"106","wei"}};
struct student b[LB]={{"103","zhang"},{"104","ma"},{"105","chen"},{"107","guo"},{"108","lui"}};
int i,j;
struct student *p,*p1,*p2,*Pt,*head1,*head2;
head1=a;
head2=b;
printf("\nlist a:\n");
for(p1=head1,i=1;p1<a+LA;i++)
{ p=p1;
p1->next=a+i;
printf("%8s,%8s\n",p1->num,p1->name);
p1=p1->next;
}
p1->next=NULL;
printf("\n list b:\n");
for(p2=head2,i=1;p2<b+LB;i++)
{ p=p2;
p2->next=b+i;
printf("%8s,%8s\n",p2->num,p2->name);
p2=p2->next;
}
p2->next=NULL;
printf("\n");
p1=head1;
while(p1!=NULL)
{ p2=head2;
while(p2!=NULL&&strcmp(p1->num,p2->num)!=0)
p2=p2->next;
if(strcmp(p1->num,p2->num)==0)
if(p1==head1)
head1=p1->next;
else
p->next=p1->next;
p=p1;
p1=p1->next;
}
p1=head1;
printf("\n result:\n");
while(p1!=NULL)
{ printf("%7s%7s\n",p1->num,p1->name);
p1=p1->next;
}
}

搜索更多相关的解决方案: 结构体  链表  define  student  

----------------解决方案--------------------------------------------------------
你的程序问题太多了~~首先struct student a[LA]={("101","wang"},{"102","li"},{"105","zhang"},{"106","wei"}};里的]("101","wang}括号弄错~,编译时,头文件不齐全~
在对head1连接时错误,而且while(p2!=NULL&&strcmp(p1->num,p2->num)!=0) p2=p2->next;这句话只有p2的移动,没有p1指针的移动,因为前面没有连接好,导致p1的指向只有一个空间而且下一个是NULL,其余的空间都泄露了~
所以在if(p1==head1) head1=p1->next;这句时,你的指针就指向了NULL~~
好好改改程序~~多思考一下~调试很重要~



----------------解决方案--------------------------------------------------------
  相关解决方案