Zdravím,
ve škole jsme dostali závěrečný projekt v jazyce C, s kterým si nevím moc rady už od samého začátku.
Zde je zadání prvního úkolu, s kterým bych potřeboval pomoc, konkrétně s uložení dat do dynamicky alokovaného pole:
Vypracujte program pro práci s evidencí studentů uloženou v
tomto textovém souboru. Předem není znám počet studentů (záznamů, pouze bude zachovaný formát). Využijte v programu dynamické pole studentů s pomocí realoc. Pomocí dynamického pole načtěte záznamy o studentech ze souboru.
Soubor s daty vypadá takto:
Karel
Smid
85 ( znaci zisk bodu daneho studenta )
Jirka
Holub
90
....atd
Tady je zatím mé řešení, které jsem dokázal splácat:
#include <stdio.h>
#include <stdlib.h>
int main()
{
/** DYNAMICK ALOKOVANE POLE */
int indexStudenta = 1;
char ** pole;
char pomocna[255];
int index = 0;
/** VICEROZMERNE POLE STUDENTU A JEJICH UDAJU */
pole = (int **) malloc(indexStudenta*sizeof(int *));
pole[0] = (char *)malloc(10*sizeof(char)); // Jmeno
pole[1] = (char *)malloc(10*sizeof(char)); // Prijmeni
pole[2] = (char *)malloc(10*sizeof(char)); // Znamka
/** OTEVRENI SOUBORU */
FILE *soubor;
soubor = fopen("seznam.txt","r");
if(soubor == NULL) {
printf("Soubor nebyl nalezen.");
return 0;
}
/** CTENI SOUBORU */
while ((fscanf(soubor, "%[^\n]", pomocna)) != EOF) {
fgetc(soubor);
if(index==0) { pole[indexStudenta][0] = pomocna; index++; }
if(index==1) { pole[indexStudenta][1] = pomocna; index++; }
if(index==2) {
pole[indexStudenta][2] = pomocna;
index = 0;
indexStudenta++;
pole = (int **) realloc(pole, indexStudenta*sizeof(int *));
}
printf("%s \n", pole[indexStudenta][index]);
}
free(pole);
fclose(soubor);
return 0;
}
Bohužel nějak jsem se nejspíše zamotal právě v té dynamické alokaci a program padá. Mohl by mi prosím někdo poradit, jak nejlépe tyto data ukládat do dynamického pole, aby všechno fungovalo ?
Děkuji.