Helo
Jestem początkujący w C, więc mój problem może okazać się bardzo trywialny - mimo to od kilku godzin nie potrafię tego rozwiązać ;)
Sprawa wygląda tak: zrobiłem listę jednokierunkową, zapisuję ją do pliku. W liście jest struktura 3-elementowa i wpisuję te elementy do pliku jeden nad drugim (tzn w jednej kolumnie). Oto w jaki sposób odczytuję listę z pliku - problem występuje już przy odczytaniu pierwszego elementu listy, więc pominę kod odpowiedzialny za kolejne elementy:
int licznik = 1;
char jeden[51];
while(fgets(jeden,50,fp) != NULL ){ // pobranie wiersza z pliku
if (feof (fp))
break;
//<tu usuwam 'entery' z pobranych zmiennych, kod pominę>
switch (licznik) {
case 1: first = malloc (sizeof(el_listy));
first->dane.tekst = jeden; //program pobrał pierwszy element struktury, więc przypisuje go do niej
printf("licznik: %d, pierwszy element: %s \n", licznik, first->dane.tekst);
licznik++;
break;
case 2: first->dane.cena = jeden; //licznik został zinkrementowany, więc teraz nowo pobrany wiersz przypisuje drugiemu elementowi struktury
printf("licznik: %d, drugi element: %s \n", licznik, first->dane.cena);
licznik++;
break;
case 3:
first->dane.bla = jeden; //trzeci wiersz trafia do ostatniego elementu struktury
first->next = NULL;
printf("licznik: %d, trzeci element: %s \n", licznik, first->dane.bla);
licznik++;
break;
//<w case 4, 5 i 6 dodaję każdy kolejny element listy, ten kod pomijam>
}//endswitch
} //endwhile
Problem jest taki: po wykonaniu tej pętli każdy element struktury ma wartość ostatniego elementu pliku. Czyli jeśli plik ma 9 takich elementów (czyli 3 struktury):
1
123
432
...
00
...to każdy element struktury w każdym elemencie listy będzie miał wartość 00. Tymczasem w tych printf przed inkrementacją licznika wypisuje wszystkie elementy prawidłowo. Licznik oczywiście liczy ile wartości zostało pobranych z pliku. Teoretycznie powinno zapisać do listy tylko wartości '1', '123' i '432', jednak program i tak przypisuje ostatnią wartość pliku do listy mimo, że pętla wykonuje się już 9 raz i nie dotyczy warunków 'switcha', w których program tworzy listę.
Ma ktoś jakieś pomysły w czym robię błąd?
pozdrawiam
flaa