Dostałem zadanie aby napisać listę jednokierunkową która będzie przechowywać dane osób. Jak na razie zrobiłem tylko część programu (muszę dodać jeszcze kilka funkcji) niemniej dodawanie elementów jak i wyświetlanie powinno już działać. Powinno, a nie działa niestety. O ile dodawanie elementu żadnych błędów nie pokazuje o tyle przy wyświetlaniu jest problem, bo wywala błąd, że nie może odczytać pamięci, czyli prawdopodobnie gdzieś namieszałem ze wskaźnikami. Niestety jestem w tym języku laikiem i nie za bardzo jestem w stanie ogarnąć gdzie popełniłem błąd. Bardzo bym prosił o przejrzenie kodu i doradzenie co skopałem.
Kod: Zaznacz cały
#include <stdlib.h>
#include <stdio.h>
typedef struct osoba
{
char imie[30];
char nazwisko[30];
int wiek;
char wlosy[15];
int wzrost;
struct osoba *nastepny;
}osoba;
typedef struct lista
{
int licznik;
osoba *pierwszy;
}lista;
int nowaLista(lista *list)
{
list->licznik=0;
list->pierwszy=NULL;
return 0;
}
int dodaj(lista *list)
{
osoba *ten=NULL;
osoba *ostatni=NULL;
osoba *nowy=NULL;
ten=(osoba*)malloc(sizeof(osoba));
ostatni=(osoba*)malloc(sizeof(osoba));
ten=ostatni=list->pierwszy;
while(ten)
{
ostatni=ten;
ten=ten->nastepny;
}
nowy=(osoba*)malloc(sizeof(osoba));
nowy->nastepny=NULL;
printf("Imie: ");
getchar();
fgets(nowy->imie, 29, stdin);
printf("Nazwisko: ");
fgets(nowy->nazwisko, 29, stdin);
printf("Wiek: ");
scanf("%d",&nowy->wiek);
printf("Kolor wlosow: ");
getchar();
fgets(nowy->wlosy, 14, stdin);
printf("Wzrost(w centymetrach): ");
scanf("%d",&nowy->wzrost);
++(list->licznik);
if(!ostatni)
{
list->pierwszy=nowy;
return 0;
}
ostatni->nastepny=nowy;
return 0;
}
int wyswietl(osoba *os)
{
int i=1;
osoba *tmp;
tmp=os;
while (tmp->nastepny!=NULL)
{
printf("%d .Imie: %c Nazwisko: %c Wiek: %d Kolor wlosow: %c Wzrost: %c cm/n",i,tmp->imie,tmp->nazwisko,tmp->wiek,tmp->wlosy,tmp->wzrost);
i++;
tmp=tmp->nastepny;
}
}
/*int usun(){}
int zapisz(){}*/
int main(int argc, char *argv[])
{
int a;
lista list;
printf("LISTA
");
while(2>1)
{
printf("Co chcesz zrobic?:
1.Wyswietl liste
2.Dodaj nowa osobe do listy
3.Wyczysc liste
4.Zapisz liste
5.Zakoncz program
");
nowaLista(&list);
scanf("%d",&a);
switch(a)
{
case 1:
osoba *os;
os=list.pierwszy;
wyswietl(os);
break;
case 2:
dodaj(&list);
break;
/*case 3:
usun()
break;
case 4:
zapisz()
break;*/
case 5:
return 0;
break;
}
}
return 0;
}