Проблемы чтения переменной из файла .dat в C - PullRequest
0 голосов
/ 12 января 2020

В программе, которую я должен сделать для назначения, нам предоставляется файл .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);
}

1 Ответ

1 голос
/ 13 января 2020

Проблема заключалась в использовании %d при выводе в текстовый файл вместо использования %s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...