读书人

为啥输出时打印了两个最后的name

发布时间: 2013-07-01 12:33:04 作者: rapoo

为什么输出时打印了两个最后的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

读书人网 >C语言

热点推荐