| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:结构体问题
只看楼主 加入收藏
haichuan
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-3-7
收藏
 问题点数:0 回复次数:1 
结构体问题

求助:如下程序是要从链表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 
2006-04-22 13:27
羔羊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-20
收藏
得分:0 
你的程序问题太多了~~首先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~~
好好改改程序~~多思考一下~调试很重要~



本人纯属虚构,如有遇见纯属见鬼~!
2006-04-23 00:45
快速回复:结构体问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049448 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved