Dodawanie elementy do końca listy

0

Cześć. Mam problem, niby banalnie prosty program, a jednak nie działa mi. Program, który powinien dodawać jako ostatni element listy pary wyrazów, jednak zamiast tego dodaje je jako pierwszy element listy i dalej je tylko powiela. Nie mam pojęcia co jest źle w tej funkcji dodawania, czy ktoś mógłby mi to wyjaśnić?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct elem {
    char *w;
    char *x;
    struct elem *next;
} para;

para *dodaj (para *elem, char *wu, char *iks) {
    if (elem == NULL) {
        para *elem2 = malloc ( sizeof *elem2 );
        elem2->w = wu;
        elem2->x = iks;
        elem2->next = elem;
        return elem2;
    }
    else {
        printf ("%s, %s\n", elem->w, elem->x);
        elem->next = dodaj (elem->next, wu, iks);
        return elem;
    }

}

void zwolnij (para *elem) {
    if (elem != NULL)
        zwolnij (elem->next);
    free (elem);
}

int main () {

    char c[1000], d[1000];
    int liczba = 0;
    para *lista = NULL;

    while ( 1 ) {
        printf ("Podaj lancuch w%i (aby skonczyc wpisz koniec):\n", liczba+1);
        scanf ("%s", c);

        if ( strcmp(c, "koniec") == 0 )
            break;

        printf ("Podaj lancuch x%i:\n", liczba+1);
        scanf ("%s", d);
        lista = dodaj (lista, c, d);

        liczba+=1;
    }

    zwolnij (lista);

    return EXIT_SUCCESS;
}
0

Bo nie dodajesz wyrazów, tylko wskaźniki do wyrazów, które zawsze wskazują na tablice c i d.
Dla składników w i x w funkcji dodajpowinieneś użyć malloc i strcpy, a w funkcji zwolnij użyć free.

0

Rzeczywiście! W sumie to przecież oczywiste, chyba nieprzytomny byłem jak to pisałem. Dzięki :)

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