flaa Napisano Wrzesień 17, 2011 Zgłoś Share Napisano Wrzesień 17, 2011 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 More sharing options...
KaYou Napisano Wrzesień 17, 2011 Zgłoś Share Napisano Wrzesień 17, 2011 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.