Функция чтения номеров из файла и перераспределения памяти следующая:
int readGrades(GRADE **grades, size_t *numberOfGrades){
FILE *data=fopen("data.txt", "r");
if(data==NULL){
fprintf(stderr,"Could not open the file.\n");
return 1;
}
for(size_t i=0;fscanf(data,"%d %d", &((*(grades)[i]).number), &((*(grades)[i]).finalGrade))==2;i++){
(*numberOfGrades)++;
*grades=realloc(*grades, (*numberOfGrades)*GRADE_TYPE_SIZE);
if(*grades==NULL){
fprintf(stderr,"There was an error allocating memory at line %d.\n", __LINE__);
return 2;
}
}
(*numberOfGrades)--;
*grades=realloc(*grades, (*numberOfGrades)*GRADE_TYPE_SIZE);
if(*grades==NULL){
fprintf(stderr,"There was an error allocating memory at line %d.\n", __LINE__);
return 2;
}
if(fclose(data)){
fprintf(stderr,"Could not close the file.\n");
return 1;
}
return 0;
}
Вызов
int error=readGrades(&grades, &numberOfGrades);