Listy podwieszane w C

0

Mam problem z lista podwieszana, program bez wiekszego problemu tworzy mi glowna liste, ale nie moze stowrzyc nowego obiektu z listy podwieszanej.
Oto struktury:

struct Aktorzy{
struct Aktorzy* nast;
char Imie[];
};
struct Film{
struct Film* nast;
struct Aktorzy* nast2;
char  Premiera[30], Nazwa[];
};
struct RezyserFilmowy{
struct RezyserFilmowy* nast;
struct Film* glowa;
char Imie[];
};

A oto moj kod:

void ZczytajListe (char []);
void DodajRezysera(char[], RezyserFilmowy**);
void DodajFilm (char[], char[], RezyserFilmowy**);
void DodajDate (char[], char[], char[], RezyserFilmowy**);
void DodajAktora (char[], char[], char[], RezyserFilmowy**);

int main()
{
    char nazwapliku[] = "Lista.txt";
    ZczytajListe (nazwapliku);
    return 0;
}

void ZczytajListe (char nazwa[]){
char temp[100], rezyser[100], film[100], y = 'y', x = 'x';;
RezyserFilmowy *head;
head = (RezyserFilmowy*)malloc(sizeof(RezyserFilmowy));
head = NULL;
FILE *plik;
if((plik = fopen(nazwa, "r")) == NULL){
        printf ("Nie udalo sie otworzyc pliku\n");
    }
    else{
        while(!feof(plik)){
            fgets(temp, 18, plik);
            strcpy(rezyser, temp);
            DodajRezysera(rezyser, &head);
            while(temp[0] != x){
                fgets(temp,200,plik);
                strcpy(film, temp);
                DodajFilm(film, rezyser, &head);
                fgets(temp,200,plik);
                DodajDate(temp, rezyser, film, &head);
                while(temp[0] != y){
                    fgets(temp, 200, plik);
                    DodajAktora(temp, rezyser, film, &head);
                }
            }
        }
    }
}

void DodajRezysera(char imie[], RezyserFilmowy** head){
    int dlugosc;
    RezyserFilmowy* pomoc = *head;
    RezyserFilmowy* nowy = (RezyserFilmowy*)malloc(sizeof(RezyserFilmowy));
    dlugosc = strlen (imie);
    strncpy(nowy->Imie, imie, dlugosc);
    nowy->glowa = NULL;
    nowy->nast = NULL;
    if( (*head) == NULL){
        *head = nowy;
    }
    else{
        while(pomoc->nast != NULL){
            pomoc = pomoc->nast;
        }
        pomoc->nast = nowy;
    }
}

void DodajFilm (char tytul[], char rezyserf[], RezyserFilmowy** head){
    int dlugosc;
    RezyserFilmowy* pomoc = *head;
    Film* nowy = (Film*)malloc(sizeof(Film));
    dlugosc = strlen (tytul);
    strncpy(nowy->Nazwa, tytul, dlugosc);
    nowy->nast = NULL;
    nowy->nast2 = NULL;
    Film* pomoc2 = NULL;
    if(head == NULL) return NULL;
    else{
        while (pomoc->nast != NULL && pomoc->Imie != rezyserf){
            pomoc = pomoc->nast;
        }
        if (pomoc->glowa == NULL){

            pomoc->glowa = nowy;
        }
        else {
            pomoc2 = pomoc->glowa;
            while (pomoc2 != NULL){
                pomoc2 = pomoc2->nast;
            }
            pomoc2 = nowy;
        }
    }
}

void DodajDate (char data[], char rezyser[], char film[], RezyserFilmowy** head){
    int dlugosc;
    RezyserFilmowy* pomoc = *head;
    Film* pomoc2 = NULL;
    if(head == NULL) return;
    else{
        while (pomoc->nast != NULL && pomoc->Imie != rezyser){
            pomoc = pomoc->nast;
        }
        pomoc2 = pomoc->glowa;
        while (pomoc2 != NULL && pomoc2->Nazwa != film){
            pomoc2 = pomoc2->nast;
        }
        dlugosc = strlen (data);
        strncpy(pomoc2->Premiera, data, dlugosc);
    }
}

void DodajAktora (char aktor[], char rezyser[], char tytul [], RezyserFilmowy** head){
    int dlugosc;
    RezyserFilmowy* pomoc = *head;
    Film* pomoc2 = NULL;
    Aktorzy *pomoc3 = NULL;
    if(head == NULL) return NULL;
    else{
        while (pomoc->nast != NULL && pomoc->Imie != rezyser){
            pomoc = pomoc->nast;
        }
        pomoc2 = pomoc->glowa;
        while (pomoc2 != NULL && pomoc2->Nazwa != tytul){
            pomoc2 = pomoc2->nast;
        }
        pomoc3 = pomoc2->nast2;
        if (pomoc3 == NULL){
            Aktorzy* nowy = (Aktorzy*)malloc(sizeof(Aktorzy));
            dlugosc = strlen (aktor);
            strncpy(nowy->Imie, aktor, dlugosc);
        }
        else{
            while (pomoc3->nast != NULL){
                pomoc3 = pomoc3->nast;
            }
            Aktorzy* nowy = (Aktorzy*)malloc(sizeof(Aktorzy));
            dlugosc = strlen (aktor);
            strncpy(nowy->Imie, aktor, dlugosc);
        }
    }
}

Program zacina sie w momencie gdy wchodzi do funkcji DodajFilm i jest na linii:

Film* nowy = (Film*)malloc(sizeof(Film));

Czy ktoś mógłby mi podpowiedzieć lub wytłumaczyć dlaczego?

0

Hejka
Czy chodzi Ci o coś takiego ?

0
Adept123 napisał(a):

Hejka
Czy chodzi Ci o coś takiego ?

Stworzylem sobie plik:

Quentin Tarantino
Pulp Fiction
12 maja 1994
John Travolta
Samuel L. Jackson
Uma Thurman
Bruce Willis
Harvey Keitel
y
Django
11 grudnia 2012
Jamie Foxx
Christoph Waltz
Leonardo DiCaprio
Kerry Washington
Samuel L. Jackson
Walton Goggins
y
Bękarty wojny
20 maja 2009
Brad Pitt
Mélanie Laurent
Christoph Waltz
Eli Roth
Michael Fassbender
Diane Kruger
y
Wściekłe psy
21 stycznia 1992
Harvey Keitel
Michael Madsen
Tim Roth
Steve Buscemi
Quentin Tarantino
Edward Bunker
x

Gdzie y oznacza koniec aktorow dla danego filmu, a x oznacza ze bedzie nastepny rezyser.

Rozwiazalem problem z dodawaniem do listy itp. zapomnialem dodac paru "->nast"

Teraz moim jedynym problemem jest jak zmienic petle while w pobieraniu z pliku, aby dzialaly.

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