各位程序员好,我正试图理解我的代码的这个区域到底发生了什么。问题:我读一些内容到一个文件,然后我试图读回文件的内容只是为了确保它的正确的内容,我已经放入文件,但它没有给我正确的输出,所以我有点困惑这里是代码(保存内容为二进制):
typedef struct acc
{
int id_no;
int pin;
float bal;
}Acc;
int Crte_acc(FILE *flepss)
{
int i,cnt;
Acc user[1000];
cnt = 1000;
for (i=1;i<1000;i++)
{
cnt+=1;
user[i].id_no = cnt;
user[i].bal=1000;
user[i].pin=0000;
fwrite(&user[i].id_no,sizeof(int),1,flepss);
fwrite(&user[i].pin,sizeof(int),1,flepss);
fwrite(&user[i].bal,sizeof(int),1,flepss);
}
return fclose(flepss);
}
是的,上面的代码需要一个文件指针和一个计数来保持id增加1(1001,1002等),bal和pin需要我用这些数字设置var。所以我想知道是什么问题,这是我显示内容的代码。
void DisplyFile()
{
FILE *dfp;
int x;
Acc pruser[1000];
dfp = fopen("Account.dat","rb");
fseek(dfp,0,SEEK_SET);
while (1)
{
if(!feof(dfp))
{
for (x=1;x<1000;x++)
{
fread(&pruser[x].id_no,sizeof(pruser[x].id_no),1,dfp);
fread(&pruser[x].pin,sizeof(pruser[x].pin),1,dfp);
fread(&pruser[x].bal,sizeof(pruser[x].bal),1,dfp);
printf("%d ",pruser[x].id_no);
printf("%d ",pruser[x].pin);
printf("%.2fnn",pruser[x].bal);
}
}
else
{
break;
}
}
}
编辑:通过内容出来错误我的意思是,给我垃圾值,以表明我写文件没有保存。
问题可能是由于缺少fclose或fopen…我们几乎不需要做什么来构建一个有用的东西。
检查三件事:
- fopen
对应fclose
吗?
-打开类型是否相似?是否同时使用"wb"one_answers"rb" ?
-另一点是fwrite(&user[i].bal,sizeof(int),1,flepss);
…bla
是浮点数。float和int可能有相同的sizeof
,但是…更安全的假设是,情况并非总是如此!
#include <stdio.h>
typedef struct acc
{
int id_no;
int pin;
float bal;
}Acc;
int Crte_acc()
{
FILE *flepss;
int i,cnt;
Acc user[10];
cnt = 1000;
flepss = fopen("Account.dat","wb");
for (i=1;i<10;i++)
{
cnt+=1;
user[i].id_no = cnt;
user[i].bal=10;
user[i].pin=0000;
fwrite(&user[i].id_no,sizeof(int),1,flepss);
fwrite(&user[i].pin,sizeof(int),1,flepss);
fwrite(&user[i].bal,sizeof(float),1,flepss);
}
return fclose(flepss);
}
void DisplyFile()
{
FILE *dfp;
int x;
Acc pruser[10];
dfp = fopen("Account.dat","rb");
fseek(dfp,0,SEEK_SET);
while (1)
{
if(!feof(dfp))
{
for (x=1;x<10;x++)
{
fread(&pruser[x].id_no,sizeof(pruser[x].id_no),1,dfp);
fread(&pruser[x].pin,sizeof(pruser[x].pin),1,dfp);
fread(&pruser[x].bal,sizeof(pruser[x].bal),1,dfp);
printf("%d ",pruser[x].id_no);
printf("%d ",pruser[x].pin);
printf("%.2fnn",pruser[x].bal);
}
}
else
{
break;
}
}
fclose(dfp);
}
int main()
{
Crte_acc();
printf("file printedn");
DisplyFile();
printf("end file read 1n");
DisplyFile();
printf("end file read 2n");
return 0;
}
编译:gcc main.c -o main
再见,