程序错误~~抠了一周了~~
#include<stdio.h>#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.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_ma;
struct Family *p_to_pa;
};
int main(void)
{
struct Family *first=NULL;
struct Family *current=NULL;
struct Family *last=NULL;
char more='\0';
for( ; ; )
{
printf("\nDo you want to enter 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!=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%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("and %s's birth date is %d/%d/%d.\n",
(*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);
}
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=(*temp).p_to_ma=(*temp).p_to_pa=NULL;
return temp;
}
bool set_ancestry(struct Family *pmember1,struct Family *pmember2)
{
if(strcmp((*pmember1).father,(*pmember2).name)==0)
{
(*pmember1).p_to_pa=pmember2;
return true;
}
if(strcmp((*pmember1).mother,(*pmember2).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(pmember1,pmember2);
}
编译器是code::blocks的~~错误隐藏的很深啊~~