结构体指针链表,编译报错,求指导!!

lanskyxti1 2014-11-29 10:17:07
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
struct Family *get_person(void);//输入个人信息
bool related(struct Family *pmember1,struct Family *pmember2);//测试他爷爷、他奶奶
bool set_ancestry(struct Family *pmember1,struct Family *pmember2);
struct Date
{
int day;
int month;
int year;
};
struct Family
{
struct Date dob;
char name[20];
char father[20];
char mother[20];
struct Family *next;
struct Family *previous;
struct Family *p_to_pa;
struct Family *p_to_ma;
};
int main(void)
{
struct Family *first=NULL;
struct Family *current=NULL;
struct Family *last=NULL;
//struct Family *pmember1=NULL;
//struct Family *pmember2=NULL;
char more='\0';
for(;;)
{
printf("\nDo you want to details of a%s person (Y or N)?",first !=NULL?"nother":"");
scanf(" %c",&more);
if(tolower(more)=='n')
break;
current=get_person();
if(first==NULL)
{
first=current;
last=current;
}
else
{
last->next=current;
current->previous=last;
last=current;
}
current=first;
while(current->next !=NULL)
{
int parents=0;
last=current->next;
while(last !=NULL)
{
if(related(current,last))
if(++parents==2)
break;
last=last->next;
}
current=current->next;
}
}
/*current=first;
while(current->next !=NULL)
{
int parents=0;
last=current->next;
while(last !=NULL)
{
if(related(current,last))
if(++parents==2)
break;
last=last->next;
}
current=current->next;
}*/
current=first;
while(current !=NULL)//按顺序输出名字,日,月、年、父亲、母亲,及认爷爷,奶奶
{
printf("\n%s was born %d/%d/%d,and has %s and %s as parents.",current->name,current->dob.day,current->dob.month,current->dob.year,current->father,current->mother);
if(current->p_to_pa !=NULL)
printf("\n\t%s's birth date is %d/%d/%d",current->father,current->p_to_pa->dob.day,current->p_to_pa->dob.month,current->p_to_pa->dob.year);
if(current->p_to_ma !=NULL)
printf("\n\t%s's birth date is %d/%d/%d",current->mother,current->p_to_ma->dob.day,current->p_to_ma->dob.month,current->p_to_ma->dob.year);
current=current->next;
}
current=first;
while(current !=NULL)//释放内存
{
last=current;
current=current->next;
free(last);
}
system("pause");
return 0;
}
struct Family *get_person(void)
{
struct Family *temp;
temp=(struct Family*)malloc(sizeof(struct Family));
printf("\nEnter the name of the person:");
scanf("%s",temp->name);
printf("\nEnter %s's date of birth (day month year):",temp->name);
scanf("%d %d %d",&temp->dob.day,&temp->dob.month,&temp->dob.year);
printf("\nWho is %s's father?",temp->name);
scanf("%s",temp->father);
printf("\nWho is %s's mother?",temp->name);
scanf("%s",temp->mother);
temp->next=temp->previous=NULL;
temp->p_to_pa=temp->p_to_ma=NULL;
return temp;
}
bool set_ancestry(struct Family *pmenber1,struct Family *pmenber2)//测试A是否是B的爷爷/奶奶
{
struct Family *pmember1;
struct Family *pmember2;
if(strcmp(pmenber1->father,pmenber2->name)==0)
{
pmember1->p_to_pa=pmember2;
return true;
}
if(strcmp(pmember1->mother,pmenber2->name)==0)
{
pmember1->p_to_ma=pmember2;
return true;
}
else
return false;
}
bool related(struct Family *pmember1,struct Family *pmember2)
{
return set_ancestry(pmember1,pmember2)||set_ancestry(pmember2,pmember1);
}
...全文
268 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanskyxti1 2014-11-29
  • 打赏
  • 举报
回复
补充问题:这个问题不是编译报错,而是运行了中出错,本人是新学编程的,还不是很会使用Debug去检查出错位置,求各路大神给指点下那里出错了的。谢谢!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧