来自二进制文件的报告 c++ - turbo c

report from binary file c++ - turbo c

我正在研究 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: \t\t\t");
 printf("Book ID: \t\t\t");
 printf("Book Publisher: \n");
 do{
  i++;
  fseek (pt,sizeof(listbooks[i]), 0);
  fread(&listbooks[i], sizeof(listbooks[i]), i,pt);
    printf("%s \t\t\t\t", listbooks[i].name);
    printf("%s \t\t\t\t", listbooks[i].id);
    printf("%s \n", listbooks[i].publisher);
    if(i>=4) break;
 }while(!feof(pt));

我的问题在“//演出报告代码”块中,请帮助我。

谢谢。

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

删除对 fseek 的调用。