Witam wszystkich, jest mi ktoś w stanie jakoś logicznie wyjaśnić jak się poruszać po listach?
Mam za zadanie napisać program do obsługi muzeum i przede wszystkim problem mam z wczytywaniem danych z pliku do listy(w pliku każda linijka oznacza inną daną eksponatu a linijka zawierająca sam średnik oznacza przejście do następnego eksponatu). Stworzyłem coś takiego i wygląda na to że w czasie wczytywania działa poprawnie :
typedef struct skladnik_t {
struct skladnik_t *next;
const char *LP;
const char *nazwa_p;
const char *opis_p;
const char *okr_poch;
const char *waga_p;
const char *data_dod;
const char *stan_p;
const char *dost;
} skladnik;
skladnik *skladnik_stworz() {
return malloc(sizeof(skladnik));
}
int main()
{
int wyb, i, licz = 0, nr_l = 1, x = 1, nr_eksp = 1;
skladnik *pocz_eksp = skladnik_stworz();
skladnik *eksponat = pocz_eksp;
FILE *ekspo;
ekspo = fopen("eksponaty.txt","a+");
char bufor[255];
while(fgets ( bufor , 255 , ekspo ) != NULL)
{
printf("Czytam linie nr %d -> ", nr_l);
nr_l++;
if(eksponat->next != NULL)
{
if(bufor[0] == ';')
{
eksponat->next = skladnik_stworz();
eksponat = eksponat->next;
printf("Przejscie do kolejnego eksponatu..\n");
}
else
{
switch(x)
{
case 1:
eksponat->LP = bufor;
printf("LP : %s", eksponat->LP);
x++;
break;
case 2:
eksponat->nazwa_p = bufor;
printf("Nazwa %d eksponatu : %s",nr_eksp,eksponat->nazwa_p);
x++;
break;
case 3:
eksponat->opis_p = bufor;
printf("Opis %d eksp : %s",nr_eksp, eksponat->opis_p);
x++;
break;
case 4:
eksponat->okr_poch = bufor;
printf("Okres pochodzenia eksponatu nr %d : %s ", nr_eksp,eksponat->okr_poch);
x++;
break;
case 5:
eksponat->waga_p=bufor;
printf("Waga eksp nr %d : %s",nr_eksp,eksponat->waga_p);
x++;
break;
case 6:
eksponat->data_dod = bufor;
printf("Data dodania eks nr %d : %s",nr_eksp, eksponat->data_dod);
x++;
break;
case 7:
eksponat->stan_p = bufor;
printf("Stan przedmiotu nr %d to %s ",nr_eksp, eksponat->stan_p);
x++;
break;
case 8:
eksponat->dost = bufor;
if(bufor[0] == '1')
{
printf("Eksponat dostepny\n");
}
else printf("Eksponat niedostepny\n");
x = 1;
nr_eksp++;
break;
}
}
}
}
Lecz gdy wywołuję np
printf("%s\n", eksponat->nazwa_p);
To wynikiem jest 0 wyświetlone na ekranie.
Dlaczego tak się dzieje? Co tu jest nie tak? Będę wdzięczny za każdą pomoc.