房天下 > 房天下问答 > 业主生活 > 其他
  • 关于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遍,第一组正常,请问这是什么原因

    提问者:whanwff

    发布于2010-11-06

共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;}
    +11 2010-11-06 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。