来自二进制文件涡轮增压 C 的报告

report from binary file turbo c

本文关键字:报告 二进制文件      更新时间:2023-10-16

我正在研究 c++ 和 turbo c。

我想显示提交到二进制文件的所有记录,但我的代码只显示第二条记录,而不显示所有记录。例如,如果向文件添加 10 条记录,则在报告中显示 10 条记录,但它们是一条,只是重复到这 10 行。

我的代码

//My struct
struct {
 char name[20];
 char id[2];
 char publisher[20];} books, listbooks[100];
//Codes for add records to file
   FILE *pt;
 pt=fopen("books.dat","a");
 clrscr();
  printf("t Please Enter Data for new book");
  printf("n Please enter Name:");
  scanf("%s", &books.name );
  printf("Please enter ID:");
  scanf("%s", &books.id);
  printf("Please enter Publisher:");
  scanf("%s", &books.publisher);
fwrite(&books, sizeof(books), 1,pt);
fclose(pt);
//Codes for show report
 FILE *pt;
 pt=fopen("books.dat","r");
 int i=0;
 printf("Book Name: ttt");
 printf("Book ID: ttt");
 printf("Book Publisher: n");
 do{
  i++;
  fseek (pt,sizeof(listbooks[i]), 0);
  fread(&listbooks[i], sizeof(listbooks[i]), i,pt);
    printf("%s tttt", listbooks[i].name);
    printf("%s tttt", listbooks[i].id);
    printf("%s n", listbooks[i].publisher);
    if(i>=4) break;
 }while(!feof(pt));

的问题在"//显示报告代码"块中,请帮助我。

谢谢。

在你的 do while 循环中,你总是fseek sizeof(你的记录类型)。这意味着后续fread将始终读取文件中的第二条记录。

删除对fseek 的调用。