[英]How do I read a binary file of n record using c
我有一个代码将 n 条配置文件记录写入二进制文件,但是当我尝试从中读取并在控制台上打印时,它不起作用并进入无限循环,这是我的代码:
/*profile strucre */
struct profile
{
char name[30];
int phoneNumber;
} pr;
int main()
{
int rn;
FILE *fp; //le fichier
printf("\nHow many profiles would you like to have?");
scanf("%d", &rn);
struct profile p[rn];
for (int i = 0; i < rn; i++)
{
printf("\nEnter the name no %d: ", i+1);
scanf("%s", p[i].name);
printf("\nEnter the name phone number %d: ", i+1);
scanf("%d", &p[i].phoneNumber);
}
//file creation
for (int i = 0; i < rn; i++)
{
fp = fopen ("profiles.bin", "wb");
if (fp != NULL)
{
fwrite (&p[i], sizeof (p[i]), 1, fp);
fclose (fp);
}
}
/* file reading */
if(fp==NULL) //if the file doesnt existe
{
printf("File could not open");
exit(0); //EXIT SUCCESS
}
int j = 1;
while((fread(&pr,sizeof(pr),1,fp)!= EOF)) //this doesnt work
{
printf("\nRecord No:%d",j);
printf("\n------------------");
printf("\nName:%s",pr.name);
printf("\nPhone number:%d",pr.phoneNumber);
printf("\n=======================");
j++;
}
fclose(fp);
}
输出是:
=======================
Record No:3728
------------------
Name:
Phone number:0
=======================
Record No:3729
------------------
Name:
Phone number:0
=======================
Record No:3730
------------------
Name:
Phone number:0
=======================
Record No:3731
------------------
Name:
Phone number:0
=======================
Record No:3732
------------------
Name:
Phone number:0
=======================
Record No:3733
------------------
Name:
Phone number:0
=======================
Record No:3734
------------------
Name:
Phone number:0
=======================
Record No:3735
------------------
Name:
Phone number:0
=======================
Record No:3736
------------------
Name:
Phone number:0
=======================
Record No:3737
------------------
Name:
Phone number:0
=======================
Record No:3738
------------------
Name:
Phone number:0
=======================
Record No:3739
------------------
Name:
Phone number:0
=======================
Record No:3740
------------------
Name:
Phone number:0
=======================
Record No:3741
------------------
Name:
Phone number:0
=======================
Record No:3742
------------------
Name:
Phone number:0
=======================
Record No:3743
------------------
Name:
Phone number:0
=======================
Record No:3744
------------------
Name:
Phone number:0
=======================
Record No:3745
------------------
Name:
Phone number:0
=======================
Record No:3746
------------------
Name:
Phone number:0
=======================
Record No:3747
------------------
Name:
Phone number:0
=======================
Record No:3748
------------------
Name:
Phone number:0
=======================
Record No:3749
------------------
Name:
Phone number:0
=======================
Record No:3750
------------------
Name:
Phone number:0
=======================
Record No:3751
------------------
Name:
Phone number:0
=======================
Record No:3752
------------------
Name:
Phone number:0
=======================
Record No:3753
------------------
Name:
Phone number:0
=======================
Record No:3754
------------------
Name:
Phone number:0
fp = fopen ("profiles.bin", "wb");
if (fp != NULL)
{
fwrite (&p[i], sizeof (p[i]), 1, fp);
fclose (fp);
}
您每次都关闭并覆盖您的文件。 所以你那里只有一个记录。
您需要将闭包移出循环。
fp = fopen ("profiles.bin", "wb");
if (fp != NULL)
{
fwrite (&p[i], sizeof (p[i]), 1, fp);
// add some error checking
}
fclose (fp);
您还需要打开文件进行阅读(因为它已关闭)
fp = fopen ("profiles.bin", "rb");
/* file reading */
if(fp==NULL) //if the file doesnt exist
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.