0$房天下问答|关于C语言的fread()函数的问题$https://m.fang.com/ask/ask_1022628.html$https://static.soufunimg.com/common_m/m_public/201511/images/asksharedefault.png
packc/pages/ask/detail/detail?askid=1022628
-
关于C语言的fread()函数的问题
在使用fread()函数进行输出的时候,遇到一个很棘手的问题,具体使用到的代码如下:void print_putout(){ int i=0,n; FILE *fp; BOOK *p1; fp=fopen("list.bok","rb"); print_list_menu(); p1=&book; while(!feof(fp)) { fread(p1,sizeof(BOOK),1,fp); i++; printf("%-8s %-8s %-8s %-8s %-8s %-8s %-8d\n",p1->NUM,p1->NAME,p1->WRITER,p1->SORT,p1->PUBLISHER,p1->TIME,p1->CHARGE); if(i==8) { gotoxy(75,23); scanf("%d",&n); if(n==1) print_list_menu(); if(n==2) {p1=p1-8;i=i-8;} if(n==3) return; } } fclose(fp); gotoxy(75,23); scanf("%d",&n); if(n==1) print_error(); if(n==2) print_error(); if(n==3) return;}文件list.bok里面已经按顺序存储了结构体数据, 现在我遇到的问题是,为什么每次输出的时候,都会将最后一组数据输出2遍,比如,LIST.BOK里面有1组数据,它却会将这个输出2遍,如果有2组数据,则将第二组数据输出2遍,第一组正常,请问这是什么原因
更多
共1个回答
-
-
-
寒流飘过海
丨Lv 0
feof这个是判断fread是否越界读取了,读完到文件结尾他还是返回0的,之后再读取的时候才返回1。我改成了:void print_putout() { int i = 0, n; FILE *fp; BOOK *p1; fp = fopen("list.bok", "rb"); print_list_menu(); p1 = &book; while (!feof(fp)) { fread(p1, sizeof (BOOK), 1, fp); if (ferror(fp)) { break; } i++; printf("%-8s %-8s %-8s %-8s %-8s %-8s %-8d\n", p1->NUM, p1->NAME, p1->WRITER, p1->SORT, p1->PUBLISHER, p1->TIME, p1->CHARGE); if (i == 8) { gotoxy(75, 23); scanf("%d", &n); if (n == 1) print_list_menu(); if (n == 2) { p1 = p1 - 8; i = i - 8; } if (n == 3) return; } } fclose(fp); gotoxy(75, 23); scanf("%d", &n); if (n == 1) print_error(); if (n == 2) print_error(); if (n == 3) return;}
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。

关注成功