Problem z listą dynamiczną z pliku przy ponownym jego otwarciu.
Ostatnio zmodyfikowano 2013-06-01 19:35
JaromirHvast Temat założony przez niniejszego użytkownika |
Problem z listą dynamiczną z pliku przy ponownym jego otwarciu. » 2013-05-31 20:46:58 Problem z błędem rozwiązany, pomijając fakt że funkcja nie aktualizuje wartości : PWitam po raz pierwszy. W moim programie wielokrotnie działam w oparciu o ten sam plik tekstowy. W funkcji poniżej, która ma wczytać listę z pliku, wprowadzić zmiany jakie zaszły podczas działania programu, i zapisać listę do tego samego pliku mam problem z działaniem listy - program się wysypuje w momencie wsk->nast=NULL podczas działania na drugim elemencie listy. Dodam że inne funkcje w programie działają podobnie i nie ma z nimi problemu, czy to kwestia źle skonstruowanej w tym przypadku listy, czy problem z plikiem po wielokrotnym jego użyciu? void zapisz_liste( gracz gr ) { gracz * head = NULL, * wsk = NULL, tempbase; ifstream list( "gracze.txt" ); list >> tempbase; while( list ) { if( head == NULL ) { head = wsk = new gracz; * wsk = tempbase; if( strcmp( tempbase.player.nick, gr.player.nick ) == 0 ) { strcpy_s( tempbase.player.nick, gr.player.nick ); tempbase.player.gry = gr.player.gry; tempbase.player.wins = gr.player.wins; } } else { wsk->nast = new gracz; * wsk = tempbase; if( strcmp( tempbase.player.nick, gr.player.nick ) == 0 ) { strcpy_s( tempbase.player.nick, gr.player.nick ); tempbase.player.gry = gr.player.gry; tempbase.player.wins = gr.player.wins; } wsk = wsk->nast; wsk->nast = NULL; } list >> tempbase; } ofstream out( "gracze.txt" ); wsk = head; while( wsk != NULL ) { out << wsk->player.nick << " " << wsk->player.gry << " " << wsk->player.wins; wsk = wsk->nast; } } |
|
pekfos |
» 2013-06-01 19:26:39 Nie sprawdzasz, czy udało się otworzyć plik. |
|
JaromirHvast Temat założony przez niniejszego użytkownika |
» 2013-06-01 19:35:01 Udało mi się to ogarnąć, napiszę dla ciekawostki i tutaj : P
W funkcji podanej tutaj błędem jest że podaję *wsk=tempbase zamiast wsk->nast który wskazuje na nowo utworzony obiekt. Potem to się nakładało na siebie i lista się "zacinała". Ponadto zamiast składowych tempbase'a trzeba kopiować wartości do składowych obiektu na które wskazuje wsk. Ot, cały problem, a męczyłem się 2 dni :S |
|
« 1 » |