来自二进制文件的报告 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 循环中,您总是 fseek
ing 到 sizeof(您的记录类型)。这意味着后续 fread
将始终读取文件中的第二条记录。
删除对 fseek
的调用。
我正在研究 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 循环中,您总是 fseek
ing 到 sizeof(您的记录类型)。这意味着后续 fread
将始终读取文件中的第二条记录。
删除对 fseek
的调用。