Witam. Po skompilowaniu nie mogę wyszukać rekordów, ani też wyświetlić całej listy. Ktoś widzi gdzie i jaki jest tutaj błąd?
#include <stdio.h>
#include <stdlib.h>
#define ROZMIAR 100
struct Osoba
{
char imie [ROZMIAR];
char nazwisko [ROZMIAR];
int wiek;
struct Osoba* next;
};
void usun_liste (struct Osoba* head);
int wypisz (struct Osoba* head);
int dodaj (struct Osoba* head);
void wyszukaj (struct Osoba* head, int rok);
void usun (struct Osoba* head);
void drukuj (struct Osoba* wsk);
int main()
{
struct Osoba* head = NULL;
int menu = -1, rok;
while (menu != 0)
{
printf ("\nPodaj numer operacji: \n"
"\n1. Wypisz liste."
"\n2. Dodaj nowy na początek."
"\n3. Dodaj nowy na koniec."
"\n4. Wyszukaj wedłuk roku urodzenia."
"\n5. Usuń element z początku listy."
"\n0. Wyjdź.\n");
scanf ("%d", &menu);
switch (menu){
case 1:
{
if ( wypisz (head) == -1)
printf ("Nie udało się zaalokować pamięci");
break;
}
case 2:
{
if ( dodaj (head) == -1)
printf ("Nie udało się zaalokować pamięci");
break;
}
case 3:
break;
case 4:
{
printf ("Podaj rok urodzenia: ");
scanf ("%d", &rok);
wyszukaj (head, rok);
break;
}
case 5:
{
usun (head);
break;
}
}
}
usun_liste (head);
}
int wypisz (struct Osoba* head)
{
struct Osoba* wsk;
wsk = malloc(sizeof(struct Osoba));
if (wsk == 0)
return -1;
for (wsk = head; wsk != NULL; wsk = wsk-> next)
{
drukuj (wsk);
}
return 0;
}
int dodaj (struct Osoba* head)
{
struct Osoba* wsk;
wsk = malloc(1*sizeof(struct Osoba));
if (wsk == NULL)
return -1;
printf ("Podaj imie: ");
scanf ("%s", wsk->imie);
printf ("\nPodaj nazwisko: ");
scanf ("%s", wsk->nazwisko);
printf ("\nPodaj rok urodzenia: ");
scanf ("%d", &(wsk->wiek));
wsk->next = head;
head = wsk;
return 0;
}
void usun (struct Osoba* head)
{
struct Osoba* wsk;
wsk = head;
wsk->next = head;
free (wsk);
}
void wyszukaj (struct Osoba* head, int rok)
{
struct Osoba* wsk;
for (wsk = head; wsk != NULL; wsk = wsk->next)
if (rok == wsk->wiek)
drukuj (wsk);
}
void drukuj(struct Osoba* wsk)
{
printf ("\n%s", wsk->imie);
printf ("\n%s", wsk->nazwisko);
printf ("\nRok urodzenia: %d\n", wsk->wiek);
}
void usun_liste (struct Osoba* head)
{
struct Osoba* wsk;
wsk = head;
wsk->next = head;
free (wsk);
for (wsk = head; wsk != NULL; wsk = wsk->next)
free (wsk);
}