我正在尝试使用fread和fwrite更新.DAT文件中的记录但不知何故循环无限运行。我的代码是:
FILE *fq;
Employee eme;
long int recsize_eme;
recsize_eme=sizeof(eme);
fq=fopen("EME.DAT","rb+");
if(fq==NULL)
{
fq=fopen( "EME.DAT","wb+");
if(fq==NULL)
{
printf("Can't Open File");
exit(EXIT_FAILURE);
}
}
rewind(fq);
while(fread(&eme,recsize_eme,1,fq)==1)
{
if (compare_date(eme.pre_pay_date)==0 && compare_date(eme.pol_end_date)!=0)
{
int date[3];
int n;
n = sscanf(eme.pre_pay_date, "%d/%d/%d", &date[0], &date[1], &date[2]);
if(date[1]!=12)
{
date[1]++;
}
else
{
date[1]=1;
date[2]++;
}
snprintf(eme.pre_pay_date, sizeof(eme.pre_pay_date), "%d/%d/%d", date[0], date[1], date[2]);
printf( eme.pre_pay_date );
if (eme.pre_status!=0)
{
eme.pre_payment = eme.premium;
}
else
{
eme.pre_payment = eme.premium + eme.pre_payment;
}
printf( "%f %f\n",eme.premium,eme.pre_payment );
fseek(fq,-recsize_eme,SEEK_CUR);
fwrite(&eme,recsize_eme,sizeof(eme)/recsize_eme,fq);
}
}
fclose(fp);
该函数如果正确更新值,但在写入时会继续无限地打印值。 eme 是我声明的struct Employee的一个属性。
答案 0 :(得分:1)
您并不是说您在哪个平台上,但我可以使用MingW gcc 4.6.2在MS-Windows上重现您的问题。问题是在fwrite()
之后Windows does not flush the buffers。添加
fflush(fq);
在fwrite()
致电解决此问题之后。
另请参阅我SSCCE的https://github.com/afester/StackOverflow/tree/master/updateRecord