通过网上查阅资料,我大概知道应该是feof函数这里出了问题,可是就算feof函数是先读再返回文件状态,假如我输入前3组数据,最后多输出的不也应该是EOF符,格式化输出的话最后一行不应该是乱码才对吗?或者多输出一次最后一项的内容,而最后一项的内容是初始值{0,"",0.0}(文件创建初始100组数据都是初始值),if函数限制该项不被输出,为什么还是会输出4组数据(第三组被输出了两次)?我知道应该如何修改,应该把fread函数放在feof函数之前,可是我不理解多输出一次的原因是什么,为什么呢?希望帮忙解答一下,谢谢!
#include <stdio.h>
struct bankclient
{
int count;
char name[10];
float money;
};
void main()
{
int i,record_len;
struct bankclient client={0,"",0.0};
FILE *fp;
record_len=sizeof (struct bankclient);
if ((fp=fopen("credit.dat","w"))==NULL)
printf("FILE OPEN ERROR\n");
else
{
for (i=1;i<=100;i++)
fwrite(&client,record_len,1,fp);
fclose(fp);
printf("完成\n");
}
}
文件内容输入和输出:
#include <stdio.h>
struct bankclient
{
int count;
char name[10];
float money;
};
void main()
{
int record_len;
struct bankclient client;
FILE *fp;
record_len=sizeof(struct bankclient);
//随机写文件
if ((fp=fopen("credit.dat","r+"))==NULL)
printf("账户文件credit.dat不存在,请先建立该文件!\n");
else
{
printf("请按顺序输入账号、姓名和账户资金\n");
printf("当输入账号为0时输入结束\n");
printf("-------------------------------------\n");
printf("请输入账号:");
scanf("%d",&client.count);
getchar();
while (client.count!=0) //当输入账号为0时输入结束
{
printf("请输入户名:");
gets(client.name);
printf("请输入账户资金:");
scanf("%f",&client.money);
//getchar();
fseek(fp,(client.count-1)*record_len,0);
fwrite(&client,record_len,1,fp); //将内容写到文件的指定位置
printf("请输入账号:");
scanf("%d",&client.count);
getchar();
}
rewind(fp);
printf("账户信息如下:\n");
printf("-----------------------------------\n");
printf("%5s%8s%10s\n","账号","姓名","金额");
//显示文件中所有的记录
while (!feof(fp))
{
fread(&client,record_len,1,fp);
if (client.count!=0)
printf("%5d%10s%8.2f\n",client.count,client.name,client.money);
}
fclose(fp);
}
}