内容被读出文件时出错

时间:2014-03-23 17:11:06

标签: c file struct

Hello其他程序员我试图了解我的代码区域到底发生了什么。 问题:我将一些内容读入一个文件,然后我试图从文件中读回内容,只是为了确保它已经放入文件中的正确内容,但它没有给我正确的输出,所以我是这里有点困惑的是代码(保存的内容为二进制):

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("%.2f\n\n",pruser[x].bal);
        }
    }
    else
    {
        break;
    }
 }
}
编辑:内容出错我的意思是,给我垃圾值,表明我的写文件没有保存。

1 个答案:

答案 0 :(得分:1)

问题可能来自缺少fclose或fopen ...... 构建有效的东西几乎没有任何关系。

要检查的三件事:

- fopen对应fclose

- 类似的开放类型?是否使用了“wb”和“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("%.2f\n\n",pruser[x].bal);
            }
        }
        else
        {
            break;
        }
    }
    fclose(dfp);
}

int main()
{

    Crte_acc();
    printf("file printed\n");

    DisplyFile();
    printf("end file read 1\n");
    DisplyFile();
    printf("end file read 2\n");

    return 0;
}

编译:{{1​​}}

再见,