Odczytywanie listy jednokierunkowej z pliku

Odpowiedz Nowy wątek
2011-09-17 03:25
0

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

edytowany 1x, ostatnio: madmike, 2011-09-17 13:04

Pozostało 580 znaków

2011-09-17 12:55
0

Zapisujesz do pierwszego elementu, a powinieneś zapisywać do ostatniego , albo zapisywać do pierwszego poprzedni pierwszy po stworzeniu. Drugie rozwiązanie jest prostsze, ale nie zachowujesz poprzedniej kolejności listy.

Pozostało 580 znaków

2011-09-17 14:57
flaa
0

Funkcję odpowiedzialną za stworzenie dalszych elementów listy mam raczej dobrą, ale to nie ma znaczenia - teraz przedstawiłem przypadek, w którym tworzę tylko pierwszy element listy. Program więc powinien w kroku 1, 2 i 3 stworzyć ten element, a w dalszych krokach po prostu odczytać sobie wiersze z pliku i nic z nimi nie robić. Tymczasem w kroku dziewiątym(jeśli jest 9 elementów w pliku) program w jakiś sposób wraca do kroków 1, 2 i 3 (odpowiedzialnych za listę) i nadpisuje wszystkie elementy struktur ostatnią wartością z pliku...

Debugger w dłoń i do boju gromić kod bisurmański!Od razu ci się wyjaśni,z jakiej paki program wraca do kroków 1,2,3. - MasterBLB 2011-09-18 10:21

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0