代码如下:
contacts* read(char* filename)//把文件读入链表
{
FILE* fp;
if ((fp = fopen("people.txt","r")) == NULL)//以可读写方式打开文件,如果没有则建立一个
{
printf ("文件打开失败!\n");
exit (1);
}
contacts *head, *q, *p, *h;
head = NULL;
p = (contacts*)malloc(sizeof(contacts));
if(NULL == p)
{
printf("内存分配错误");
exit(1);
}
q = p; //开始时,p和q均指向第1个结点
while (!feof(fp))//创建链表, 并把文件内容输入
{
n++;
if (n == 1)
{
head = p;
}
else
{
q->next = p;
}
q = p;//q是最后一个结点
p = (contacts*)malloc(sizeof(contacts));
fscanf(fp,"%d %s %s",&p->no,&p->name,&p->sex);
/*int i=0;
for(i=0;i<8;i++)
{
fscanf(fp,"%s",&p->phonenumber[i]);
}
fscanf(fp,"%s %d %d %d",&p->address,&p->byear,&p->bmonth,&p->bday);*/
};
q->next = NULL;//输入完毕后,q->next为NULL
h = head;
fclose(fp);
return h;
}
void browse(contacts* head)//显示程序中所有记录的信息。
{
while(head)//当head不为空的时候
{
printf("\n==================================\
\n序号:%d\
\n姓名:%s 性别:%s",head->no,head->name,head->sex);
/*printf("\n电话号码:\n");
int i;
for(i=0; i<8; i++)
{
if(strlen(head->phonenumber[i]) == 0)
{
continue;
}
else
{
printf("%s\n",head->phonenumber[i]);
}
}
printf("住址:%s ",head->address);
printf("生日:%d年%d月%d日",head->byear,head->bmonth,head->bday);*/
printf("\n==================================\n");
head = head->next;
}
}
运行结果
为啥会这样。