В программе, которую я должен сделать для назначения, нам предоставляется файл .dat, который имеет данные в формате: идентификационный номер [9 + 1 символ], фамилия [50 + 1], имя [50 + 1 ], дата рождения [3 целых числа], улица [100 + 1 символ], номер улицы [целое число], город [30 + 1 символ].
Из этого файла .dat я должен создать структура со всеми данными. Моя проблема в том, что идентификационный номер читается неправильно, а остальная часть читается правильно. Кроме того, идентификационный номер меняется каждый раз, когда я компилирую код.
Я пытался прочитать файл из отдельной функции и из main, и я сравнил свой код с примером кода, который дал нам наш профессор, но я не могу найти ошибку. Я также попытался изменить тип идентификатора на целое число, но ошибка сохраняется.
Структура:
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);
}