Aby automatycznie wczytywać nieznany nam rozmiar danych należy wykorzystać wskaźniki i dynamiczne alokowanie pamięci. Poniższy kod jest poszukiwanym przez Ciebie rozwiązaniem:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char *argv[]){
FILE *fp;
int32_t temp;
int32_t *grades = NULL;
int32_t count = 0;
fp = fopen("grades.txt","r");
while(fscanf(fp,"%d",&temp) != EOF) {
count++;
grades = realloc(grades,sizeof(*grades)*count);
grades[count-1] = temp;
}
temp = 0;
while(temp < count) {
printf("the read value is %d\r\n", grades[temp]);
temp++;
}
fclose(fp);
free(grades);
grades = NULL;
}
Inspiracja dla powyższego kodu:
https://stackoverflow.com/a/19094299
W języku C++ jest gotowa struktura vector, która jest rodzajem tablicy o zmiennym rozmiarze. Mechanizmy zawarte w strukturze zapewniają poprawne przydzielanie i zwalnianie pamięci, co ułatwia pracę programiście.
Innym, prostszym rozwiązaniem jest po prostu przyjęcie bardzo dużego rozmiaru tablicy do wczytania wszystkich wartości.
Funkcja exit odpowiada za zakończenie działania wywołującego ją procesu. Argumentem jest status z jakim proces kończy pracę - w tym przypadku 0, czyli bez błędu.
Tutaj więcej na temat różnicy pomiędzy funkcją return, a exit:
https://stackoverflow.com/questions/3463551/what-is-the-difference-between-exit-and-return