Co mi tam, nie mam pomyslow ani polskich znakow. Dlaczego to cos nie chce poprawnie wypisac?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define DL 21
typedef struct przodek
{
char imie[DL];
struct przodek * ojciec;
struct przodek * matka;
} Przodek;
void PobierzOsobe(Przodek * P, int i, char * m);
void Inicjuj(Przodek * P);
Przodek * Szukaj(Przodek * P, char * t);
void Wyswietl(Przodek * P, int n);
int main(void)
{
Przodek osoba;
Inicjuj(&osoba);
printf("Podane imie: %s\n", osoba.imie);//tutaj juz szaleje, znaczy nic, a raczej nul wypisuje
Wyswietl(&osoba, 3);
PobierzOsobe(osoba.ojciec, 1, osoba.imie);
PobierzOsobe(osoba.matka, 20, osoba.imie);
Wyswietl(&osoba, 0);
return 0;
}
void PobierzOsobe(Przodek * P, int i, char * m)
{
puts("flaga");
P = (Przodek *) malloc(sizeof(Przodek));
puts("flaga");
if(!P)
{
fprintf(stderr, "Blad przydzialu pamieci.\n");
return;
}
printf("Podaj imie %s osoby imieniem %s: [wpisz cyfre aby zakonczyc]\n", i == 1 ? "ojca" : "matki", m);
if(!(scanf("%s", (* P).imie) == 1 && isalpha(P->imie[0])))
return;
P->matka = P->ojciec = NULL;
PobierzOsobe(P->ojciec, 1, P->imie);
PobierzOsobe(P->matka, 2, P->imie);
}
void Inicjuj(Przodek * P)
{
P = (Przodek *) malloc(sizeof(Przodek));
if(!P)
{
fprintf(stderr, "Blad przydzialu pamieci..\n");
return;
}
printf("Podaj imie pierwszej osoby: ");
scanf("%s", (* P).imie);
P->matka = P->ojciec = NULL;
printf("imie po nullach: %s adres: %p\n", P->imie, P->matka);//poprawnie wypisuje imie
}
Przodek * Szukaj(Przodek * P, char * t)
{
if(strcmp(P->imie, t))
return P;
if(P->matka)
return Szukaj(P->matka, t);
if(P->ojciec)
return Szukaj(P->ojciec, t);
return NULL;
}
void Wyswietl(Przodek * P, int n)
{
int i = n;
while(i-- > 0)
putchar('|');
printf("%s\n", P->imie);
if(P->matka)
Wyswietl(P->matka, n + 1);
if(P->ojciec)
Wyswietl(P->matka, n + 1);
}
Przykladowe wywolanie programu:
Podaj imie pierwszej osoby: Bogumil
imie po nullach: Bogumil adres: (nil)
Podane imie:
|||
||||
|||||SSH_AGENT_PID=636
Naruszenie ochrony pamięci (core dumped)
Pewnie jak zwykle glupi blad, pewnie jak zwykle zwyzywa mnie @_13th_Dragon od nieudacznikow i skrytykuje moj kod, no ale coz, raz sie zyje.