为什么输出时打印了两个最后的name
#include <stdio.h>
#include <stdlib.h>
struct employ
{
char name[10];
}per;
void Init()
{
printf("输入姓名:");
gets(per.name);
}
void readfile()
{
FILE *lp;
if((lp=fopen("persion.dat","rb"))==NULL)
{
printf("\nCannot open file strike any key exit!");
exit(1);
}
while(!feof(lp))
{
fread(&per,sizeof(struct employ),1,lp);
printf("姓名%s\n",per.name);
}
fclose(lp);
}
void savefile(int n)
{
FILE *fp;
if((fp=fopen("persion.dat","rb"))==NULL)
fp=fopen("persion.dat","wb+");
else
fp=fopen("persion.dat","ab+");
while(n)
{
Init();
fwrite(&per,sizeof(struct employ),1,fp);
n--;
}
fclose(fp);
}
main()
{
savefile(1);
readfile();
system("pause");
}
[解决办法]
你要检查fread的返回值,失败的时候,break循环,因为第二次读的时候失败了。原因是第一次读成功了,而且读出来你指定长度的数据,所以你feof检测是正常的。但在读就不行了,并且检测到feof