Skocz do zawartości

[C] Odczytywanie listy jednokierunkowej z pliku


flaa

Polecane posty

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

Link do komentarza
Udostępnij na innych stronach

Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.

 

 

 

http://www.s11n.net/

 

s11n (an abbreviation for serialization) is an Open Source project focused on the generic serialization of objects (i.e., object persistence) in the C++ programming language (and now C, too!). If you're not a C++ programmer then this site will have nothing terribly interesting for you. If you are, however, then come in and find out how to save your data...

"(2b || !(2b)) == question" W. Shakespeare

http://jakubniwa.pl - świat sztucznej inteligencji

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...