fwrite(&studentg,sizeof(studentg),1,p);
while(!feof(p))
{
    printf("flag");
    fread(&studentg,sizeof(studentg),1,p);
    printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",studentg.name,studentg.add,studentg.tel,studentg.pc,studentg.qq,studentg.email);
}

为什么我只在文件中放置一个对象,但它输出两个相同的行?
如果我把两个对象放在文件中,它输出一个正确的对象,但另一个重复。
我试着显示feof(p)的返回值,它表明在fread之后,feof(p)的返回值仍然是0。有人能解释一下它是如何发生的吗?

最佳答案

在试图读取文件之外的内容之前,不会得到文件的结尾。这意味着您必须在打印之前检查eof:

fwrite(&studentg,sizeof(studentg),1,p);
finish = 0;
while(!finish)
{
    printf("flag");
    fread(&studentg,sizeof(studentg),1,p);
    finish = feof(p);
    if (!finish)
    {
        printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",studentg.name,studentg.add,studentg.tel,studentg.pc,studentg.qq,studentg.email);
    }
}


fwrite(&studentg,sizeof(studentg),1,p);
while(1)
{
    printf("flag");
    fread(&studentg,sizeof(studentg),1,p);
    if (feof(p)) break;
    printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",studentg.name,studentg.add,studentg.tel,studentg.pc,studentg.qq,studentg.email);
}

09-05 15:55