Wczytywanie z pliku do listy

0

Witam, mam taki kawałek kodu:

 typedef struct lista
{   int id_klienta;
    char *imie_nazwisko;
    struct lista *nast_klient;
    int ilosc; //ilosc rachunkow
    float *TAB_rachunki[];
}klient;

dla struktury oraz kod własciwy:

  void lista_f()
{
    int i = 0;
    int z,y;//zmienne pomocnicze,obsluga petli
    char x[10];
    klient* pierwszy;
        while(1)
        {
            if(feof(lista_klientow) == 0)
    {
        if(i == 0)
            {
            glowa = malloc(sizeof(klient));
              pierwszy=glowa;
            }
        else{
            glowa->nast_klient = malloc(sizeof(klient));
            glowa = glowa->nast_klient;
            }
        fscanf(lista_klientow,"%i %s %i",&z,x,&y);
        glowa->id_klienta=z; glowa->imie_nazwisko=x; glowa->ilosc=y;

        printf("%i %s %i\n",glowa->id_klienta,glowa->imie_nazwisko,glowa->ilosc);
        i++;
    }
            else {glowa->nast_klient=NULL;glowa=pierwszy;break;}
    }
    printf("Liczba wczytanych klientow: %d\n",i);
             while(1){
        printf("%i %s %i\n",glowa->id_klienta,glowa->imie_nazwisko,glowa->ilosc);
        if(glowa->nast_klient == NULL){
            glowa=pierwszy;
            break;
        } else{
             glowa = glowa->nast_klient;
        }
    }
};

(otwarcie pliku,zamkniecie itp mam w innym fragmencie,otwiera zaraz przed wywolaniem funkcji lista_f();, a zamyka zaraz po tym)
W pliku dane powypisywane sa w ten sposob: 1 nazwisko1 1 2 nazwisko2 2 3 nazwisko3 3
Wyglada na to, ze wczytuje dobrze, bo po pierwszym wypisaniu(zaraz po pobraniu wartosci) sa one prawidlowe. Gorzej z wypisaniem na koncu funkcji.
Problem z tym jest nastepujacy: funkcja jakimś cudem wczytuje do kazdego pola imie_nazwisko w każdym elemencie listy OSTATNIE w pliku imie_nazwisko(nie mam pojecia jak, bo cyfry tj. id_klienta i ilosc trzyma poprawnie).Wygląda to tak:

1 nazwisko3 1
2 nazwisko3 2
3 nazwisko3 3

Co jeszcze dziwniejsze(no,przynajmniej dla mnie), pierwszy rownież się zmienia, chociaz powinien trzymać wartosc pierwszego wczytanego klienta, bo przeciez przypisuje do niego glowę tylko raz, przy pierwszym obiegu pętli.
Niestety sam nie umiem znaleźć błędu, dlatego proszę o pomoc.
@Edit- Przy zrobieniu

 fscanf(lista_klientow,"%i %s %i",& glowa->id_klienta,glowa->imie_nazwisko,&glowa->ilosc);
       

program wywala się po wczytaniu 1 klienta. Jesli ktoś umiałby pomoć byłbym bardzo wdzieczny :)

0

Shameless selfbump po 6 godzinach bez odpowiedzi... Prosze o jakiekolwiek pomysly co z tym jest nie tak, bo ja juz do tego nie mam sily, jakbym sie za to nie bral dochodze do wniosku,ze powinno dzialac...

0

A zrób tak, że do struktury dodasz :

 char tab[10]; 

i potem wczytujesz z pliku do tej tymczasowej tablicy x i kopiujesz w petli do tablicy w strukturze czyli:

 
int i=0;
while(x[i]!='\0'){
  glowa->tab[i] = x[i];
++i;
}

0

Dzieki, teraz nie ma juz problemu z "nietrzymaniem" napisu... Przy Twoim rozwiązaniu doklejał jakieś smieci do tego, ale dzięki niemu przypomniałem sobie o czymś takim jak strcpy(); i działa :)

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