【问题标题】:Error with content being read out of file从文件中读取内容时出错
【发布时间】:2014-03-23 17:11:06
【问题描述】:

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

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;
    }
 }
}

编辑:我的意思是内容错误,给我垃圾值以表明我对文件的写入没有保存。

【问题讨论】:

  • 写入文件时如何创建/打开文件?
  • fp=fopen(acc,"wb");其中 acc 是 "Account.dat" 刚刚将 fp 传递给 crte_acc
  • 你是说它没有给你正确的内容,你能详细说明一下吗?
  • 哪个尺寸有Account.dat
  • 您可以尝试在读取函数的末尾添加fclose() 吗?还有一点是fwrite(&amp;user[i].bal,sizeof(int),1,flepss);...bla 是一个浮点数。

标签: c file struct


【解决方案1】:

问题可能来自缺少 fclose 或 fopen... 几乎不需要做任何事情来构建有效的东西。

要检查的三件事:

-fopen 对应 fclose 吗?

-打开类型是否相似?是否同时使用了“wb”和“rb”?

-另一点是fwrite(&amp;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;
}

编译:gcc main.c -o main

再见,

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多