Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z listą dynamiczną z pliku przy ponownym jego otwarciu.

Ostatnio zmodyfikowano 2013-06-01 19:35
Autor Wiadomość
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 : P

Witam 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?

C/C++
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; //BŁĄD!
        }
        list >> tempbase;
       
    }
    ofstream out( "gracze.txt" );
   
    wsk = head;
   
    while( wsk != NULL ) {
        out << wsk->player.nick << " " << wsk->player.gry << " " << wsk->player.wins;
        wsk = wsk->nast;
    }
}
P-84513
pekfos
» 2013-06-01 19:26:39
Nie sprawdzasz, czy udało się otworzyć plik.
P-84567
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
P-84569
« 1 »
  Strona 1 z 1