为什么读写文件多读出一个?
typedefstructxx{unsignedinta;charc;}x;intmain(){FILE*pt=fopen("test.txt","wb+");xx1;x...
typedef struct xx{ unsigned int a; char c;}x;int main(){ FILE *pt = fopen("test.txt","wb+"); x x1; x1.c = '|'; x1.a = 8; fwrite(&x1,sizeof(x),1,pt); x1.a = 16; fwrite(&x1,sizeof(x),1,pt); x1.a = 32; fwrite(&x1,sizeof(x),1,pt); x1.a = 64; fwrite(&x1,sizeof(x),1,pt); fclose(pt); return 0;}上述程序向文件写数据下面程序读数据:typedef struct xx{ unsigned int a; char c;}x;int main(){ FILE *pt = fopen("test.txt","rb+"); x x1; while(feof(pt) ==0){ fread(&x1,sizeof(x),1,pt); printf("%d ",x1.a); } fclose(pt); return 0;}为什么读出来的是8 16 32 64 64问什么多读出来一个64
展开
展开全部
int main()
{
FILE *pt = fopen("test.txt","rb+");
x x1;
int ret;
while(feof(pt) ==0)
{
ret = fread(&x1,sizeof(x),1,pt);
printf("read %d\n", ret);
printf("%d ",x1.a);
}
fclose(pt);
return 0;
}
把read部分改成这样你可能就明白了
最后一次read到64时,由于读是成功的,所以feof判断会是false 但实际上这时已经没有数据了,下一次fread什么都没有读到,于是值还是上次的值
要想消除这个bug 那就不要使用feof 这个函数判断很鸡肋
可以
int main()
{
FILE *pt = fopen("test.txt","rb+");
x x1;
int ret;
while(fread(&x1,sizeof(x),1,pt) == 1)
printf("%d ",x1.a);
fclose(pt);
return 0;
}
{
FILE *pt = fopen("test.txt","rb+");
x x1;
int ret;
while(feof(pt) ==0)
{
ret = fread(&x1,sizeof(x),1,pt);
printf("read %d\n", ret);
printf("%d ",x1.a);
}
fclose(pt);
return 0;
}
把read部分改成这样你可能就明白了
最后一次read到64时,由于读是成功的,所以feof判断会是false 但实际上这时已经没有数据了,下一次fread什么都没有读到,于是值还是上次的值
要想消除这个bug 那就不要使用feof 这个函数判断很鸡肋
可以
int main()
{
FILE *pt = fopen("test.txt","rb+");
x x1;
int ret;
while(fread(&x1,sizeof(x),1,pt) == 1)
printf("%d ",x1.a);
fclose(pt);
return 0;
}
追问
想了一下,改成这样也行:
ret = fread(&x1,sizeof(x),1,pt);
while(feof(pt) ==0)
{
printf("read %d\n", ret);
printf("%d ",x1.a);
ret = fread(&x1,sizeof(x),1,pt);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询