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;
}