Создание массива структур на 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);
}
Так и вспоминается анекдот "Мариванна, я уже столько воды выпил — скоро ус..сь, а Петров все икает и икает!" :)