从 C 中的 .dat 文件读取变量的问题
Issues reading variable from .dat file in C
在我必须做作业的程序中,我们得到了一个 .dat 文件,其数据格式如下:身份证号码[9+1 个字符],姓氏[50+1],姓名[50 +1]、出生日期[3个整数]、街道[100+1个字符]、门牌号[整数]、城市[30+1个字符]。
我应该从那个 .dat 文件创建一个包含所有数据的结构。我的问题是身份证号读错了,其余部分读对了。另外,我每次编译代码时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);
}
问题是在输出到 .txt 文件时使用 %d
,而不是使用 %s
。
在我必须做作业的程序中,我们得到了一个 .dat 文件,其数据格式如下:身份证号码[9+1 个字符],姓氏[50+1],姓名[50 +1]、出生日期[3个整数]、街道[100+1个字符]、门牌号[整数]、城市[30+1个字符]。
我应该从那个 .dat 文件创建一个包含所有数据的结构。我的问题是身份证号读错了,其余部分读对了。另外,我每次编译代码时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);
}
问题是在输出到 .txt 文件时使用 %d
,而不是使用 %s
。