Проблема при чтении структуры из двоичного файла - PullRequest
0 голосов
/ 21 января 2019

Когда я пытался написать код, который должен сортировать некоторые структуры в файле по определенному полю (ключу), я заметил, что моя функция не будет правильно читать ключ. Я понятия не имею, что я делаю неправильно. Код не полный.

Функция constr должна считывать одну структуру за раз из двоичного файла, а затем сохранять только массив varsta. Тем не менее, если я пытаюсь увидеть, какое значение я получил, это не те значения, которые я дал.

Это мой код:

#include <stdio.h>
#include <stdlib.h>


typedef struct
{
    char nume[20];
    char prenume[20];
    float varsta;
} PERS;


typedef struct
{
    float key;
    int nr;
}INDEX;

int constr(FILE *f, INDEX tabl[])
{
    int n;
    n = ftell(f) / sizeof(PERS);

    int i, depl = 0;
    PERS p;
    for (i = 0; i < n; i++)
    {
        fseek(f, depl, 0);

        fread(&p, sizeof(p), 1, f);

        tabl[i].key = p.varsta;
        tabl[i].nr = i;
        depl += sizeof(PERS);

    }

    return n;
}





int main()
{
    FILE *f;
    PERS pers[3];


    if ((f = fopen("fis.txt", "wb+")) == NULL)
    {
        printf("Not ok");
        exit(1);
    }

    int i;
    for (i = 0; i < 3; i++)
    {
        scanf("%s%s%f", &pers[i].nume, &pers[i].prenume, &pers[i].varsta);
        fwrite(&pers[i], sizeof(PERS), 1, f);

    }


    INDEX tabl[3];

    int n = constr(f, tabl);

    printf("%d", tabl[2].key); //only to check if the key is correct

    fclose(f);
}

1 Ответ

0 голосов
/ 21 января 2019

Поле key является плавающим, но вы пытаетесь напечатать целое число.

Измените предпоследнюю строку в вашем коде на

printf("%.2f\n", tabl[2].key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...