关于C fscanf读取txt中一行行数据存入结构体中

结构体中某一个成员的数据不仅读取了自己的数据还把后一个成员的数据给读取了 求解怎么办!

book *read()
{//读取txt中的数据
FILE *fp;
if((fp=(fopen("lib.txt","a+")))==NULL)
{
printf("error");
exit(0);
}

int a;
book *l;
book *p,*r;
l=(book *) malloc(sizeof(book));
l->next=NULL;
r=l;
p=l->next;
printf("s_num name author publication year ISBN\n");
while(!feof(fp))
{
p=(book *)malloc(sizeof(book));
fscanf(fp,"%d\t%s\t%s\t%s\t%s\t%s\n",&p->s_num,p->name,p->author,p->publication,p->year,p->ISBN);
printf("%d%11s%6s%9s %34s%-13s\n",p->s_num,p->name,p->author,p->publication,p->year,p->ISBN);
p->next=NULL;
r->next=p;
r=r->next;
}
free(p);
fclose(fp);
return l;
}

txt数据:
1 CET4 ENG CET 2015-06-22 000-1-2111-3009-8
3 SAT1 ENG SAT 2013-11-30 000-1-2421-3045-9
4 CCO tou kan 2014-09-08 111-1-0000-4423-8
显示的数据:
1 CET4 ENG CET 2015-06-22000-1-2111-3009-8 000-1-2111-3009-8
3 SAT1 ENG SAT 2013-11-30000-1-2421-3045-9 000-1-2421-3045-9
4 CCO tou kan 2014-09-08111-1-0000-4423-8 111-1-0000-4423-8

根据现象分析,应该是结构体模板中的year数组长度不足造成的。另:似乎fscanf中格式控制字符串中的\t都应删除;留着,大部分情况不会错,但实在没用。
温馨提示:答案为网友推荐,仅供参考
相似回答