Создание массива структур на C

Создаю динамический массив структур, но код не работает, а выдает рандомное число на выходе. Подскажите, где может быть ошибка. Вот код:

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

struct person{
    int h;
    int k;
};


int ReadArray(FILE* file, struct person* data, int size){
    for(int i = 0; i < size; i++){
        if(fscanf(file, "%d", data[i].h) != 1){
            return -1;
        }
        if(fscanf(file, "%d", data[i].k) != 1){
            return -1;
        }
    }
    return 0;
}


int main(void){
    FILE* fin;
    struct person* data;
    int size;
    struct person* result;

    if((fin = fopen("input.txt", "rt")) == NULL){
        printf("Can't open input file!\n");
        return -1;
    }

    if(fscanf(fin, "%d", &size) != 1){
        printf("Can't read size!\n");
        fclose(fin);
        return -1;
    }

    if(size < 1){
        printf("Incorrect size!\n)");
        fclose(fin);
        return -1;
    }

    if((data = (struct person*) malloc(size * sizeof(struct person))) == NULL){
        printf("Can't allocate memory!\n");
        fclose(fin);
        return -1;
    }

    if((result = (struct person*) malloc(size * sizeof(struct person))) == NULL){
        printf("Can't allocate memory!\n");
        fclose(fin);
        return -1;
    }

    if(ReadArray(fin, data, size) < 0){
        printf("Can't read array!\n");
        free(data);
        fclose(fin);
        return -1;
    }

    fclose(fin);

    for(int i = 0; i < size; i++){
        printf("%d %d/n", result[i].h, result[i].k);
    }


}

Ответы (1 шт):

Автор решения: Harry

Начнем с того, что вы забыли, что передавать для чтения надо адрес:

fscanf(file, "%d", &data[i].h) != 1)

А закончим тем, что читаете-то вы в массив data

ReadArray(fin, data, size)

а выводите — массив result

for(int i = 0; i < size; i++)
{
    printf("%d %d/n", result[i].h, result[i].k);
}

Так и вспоминается анекдот "Мариванна, я уже столько воды выпил — скоро ус..сь, а Петров все икает и икает!" :)

→ Ссылка