这个程序显示不出某个人父母的信息~~但是要求能显示~~错在哪~~
程序代码:
#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); } set_ancestry()函数没有错误~~求指点~~