【发布时间】:2021-12-20 02:27:18
【问题描述】:
我有一个将 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
【问题讨论】:
-
寻求调试帮助的问题必须提供完整的代码minimal reproducible example。请使用完整的代码更新问题,任何人都可以完全按照所示运行以重现问题。
-
不要省略重要的代码,例如您如何打开文件以及如何检查错误。
-
文件创建错误,因为每次迭代都会打开和关闭文件。这意味着它每次都会覆盖文件的开头。那么读取也是错误的,因为它没有打开文件。
-
查看
fread()的手册页。可以返回EOF吗?
标签: c file binaryfiles