【问题标题】:Issues reading variable from .dat file in C从 C 中的 .dat 文件读取变量的问题
【发布时间】:2020-01-12 20:33:12
【问题描述】:

在我必须进行分配的程序中,我们得到一个 .dat 文件,其中包含以下格式的数据:ID 号[9+1 字符]、姓氏[50+1]、姓名[50+1 ]、出生日期[3个整数]、街道[100+1个字符]、街道号码[整数]、城市[30+1个字符]。

我应该从那个 .dat 文件中创建一个包含所有数据的结构。我的问题是 ID 号读取不正确,而其余部分读取正确。另外,每次编译代码时,ID 号都会发生变化。

我尝试从单独的函数和 main 读取文件,并将我的代码与教授给我们的示例代码进行了比较,但我找不到错误。我也尝试将 ID 类型更改为整数,但错误仍然存​​在。

结构:

typedef struct {
    char oib[9 + 1];
    char prezime[50 + 1];
    char ime[50 + 1];
    int dan;
    int mj;
    int god;
    char ulica[100 + 1];
    int ulbroj;
    char grad[30 + 1];
} Puk;

读取.dat文件的功能:

Puk* readPuk(int* n) {
    FILE* fin = fopen("puk.dat", "rb");

    fseek(fin, 0, SEEK_END);
    int br = ftell(fin) / sizeof(Puk);
    rewind(fin);

    Puk* rez = (Puk*)malloc(sizeof(Puk) * br);
    fread(&rez[0], sizeof(Puk), br, fin);

    *n = br;
    fclose(fin);
    return rez;
}

读取的数据输出位:

Puk* pukBin = readPuk(&nPuk);

for (i = 0; i < nPuk; i++) {
    fprintf(fout, "-----------\n");
    fprintf(fout, "OIB: %d\nPrezime: %s\nIme:%s\nDatum:%d.%d.%d\nUlica:%s\nBroj:%d\nGrad:%s\n", pukBin[i].oib, pukBin[i].prezime, pukBin[i].ime, pukBin[i].dan, pukBin[i].mj, pukBin[i].god, pukBin[i].ulica, pukBin[i].ulbroj, pukBin[i].grad);
}

【问题讨论】:

  • OIB: %d。您确定 id 存储为 int 吗?该结构意味着它实际上存储为字符串。也许尝试%s 而不是%d
  • @kaylum 哇。在这一点上,我一直在查看我的代码几个小时。这就是问题所在,谢谢。

标签: c file structure


【解决方案1】:

问题是在输出到 .txt 文件时使用%d,而不是使用%s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多