Lista jednokierunkowa - niepoprawny pierwszy element

0

Witam program miał czytać do listy z pliku .txt. Generalnie działa ale pierwszy wiersz okazuje się być śmieciem. Prawdopodobnie nie wypełniam pierwszego elementu listy tylko nie wiem gdzie jest błąd.

#define MAX 19

typedef struct
{
    char imie[MAX];
    char nazwisko[MAX];
    int wiek;
} Osoba;

typedef struct elem
{
    Osoba a;
    struct elem *next;
} list_elem;

void addToList(char *imie, char *nazwisko, int wiek, list_elem *first)
{

    while(first->next != NULL )
    {
        first = first->next;
    }

    list_elem *pom = malloc(sizeof(list_elem));
    strcpy(pom->a.imie,imie);
    strcpy(pom->a.nazwisko,nazwisko);
    pom->a.wiek=wiek;
    pom->next=NULL;
    first->next=pom;
}
void printthis(list_elem *first)
{
    while(first != NULL)
    {
        printf("%s %s %d\n",first->a.imie,first->a.nazwisko,first->a.wiek);
        first=first->next;
    }
}

void odczyt(char *path, Osoba przyklad)
{
    FILE *fp;
    fp = fopen(path, "r");
    int n=0;

    //first=malloc(sizeof(list_elem));
    list_elem *first=malloc(sizeof(list_elem));
    first->next=NULL;

    while(fscanf(fp,"%s %s %d", przyklad.imie, przyklad.nazwisko, &przyklad.wiek) == 3)
    {

        addToList(przyklad.imie, przyklad.nazwisko, przyklad.wiek, first);
    }

    fclose(fp);

    printthis(first);
}

int main()
{

    Osoba przyklad;

    odczyt("plik.txt", przyklad);

    return 0;
}

1

Zobacz że jak dodajesz pierwszy element do listy to i tak przypisujesz go do first->next w ostatniej linii funkcji addToList.

0

Rzeczywiście, dzięki.

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