【发布时间】:2014-10-31 06:45:05
【问题描述】:
我正在使用二进制文件 IO 函数 fread 从文件中读取文件,当我运行程序时,最终条目会打印两次
FILE *fp;
struct entry temp;
if (fp = fopen("recs.bin","rb"))
{
while (!feof(fp))
{
fread(&temp,sizeof (struct entry),1,fp);
printf("%s %s %s \n", temp.name ,temp.design ,temp.contact);
}
fclose(fp);
else
{
printf("\error opening file\n");
}
当我运行代码时,输出如下
Pfor.ABC Professor 9867552
Sir Blah lecturar 9237434
Miss etc Asst. Porfessor 03847363
Miss etc Asst. Porfessor 03847363
我总是两次得到最后一个条目 我尝试在阅读之前打印如下
while (!feof(fp))
{
printf("%s %s %s \n", temp.name ,temp.design ,temp.contact);
fread(&temp,sizeof (struct entry),1,fp);
}
现在输出是
#gd^&!d $!du(! #$@%@22 //Some garbage values
Pfor.ABC Professor 9867552
Sir Blah lecturar 9237434
Miss etc Asst. Porfessor 03847363
现在打印两次已解决,但正在打印垃圾值 我认为这是 feof(fp) 中的问题,但无法弄清楚
【问题讨论】:
-
printing beofre reading.. 你觉得怎么样?听起来不是//Some garbage values?? -
检查
fread的返回值。它无法读取最后一个条目,但temp仍然保存旧数据。 -
@Sourav 我知道,但我试图弄清楚它是否被打印了两次或阅读了两次打印之前阅读让我清楚地知道阅读有问题
-
@keltar 那么为什么 !feof() 不停止它在文件结束时进一步阅读
-
@SayamQazi 因为它在(失败)fread 和 printf 之后检查。