Struct in Einfach verkette Liste



  • Hallo, ich habe die Aufgabe den Inhalt der Folgende verkette Liste (Personen) auszugeben, bzw. in umgekehrter Reihenfolge (rekursiv gelöst) auszugeben.

    Ich weiß, dass meine Ausgabefunktionen falsch sind, aber mir ist einfach nicht klar, wie ich auf ein struct innerhalb einer Liste zugreifen kann.
    Über Hilfe wäre ich sehr dankbar. 🙂

    //struct
    typedef struct {
    char name[30];
    char vorname[30];
    } person_t;
    
    //linked list
    typedef struct perslistelement {
    person_t pers_obj;
    struct perslistelement *next;
    } PersListElement;
    
    //Ausgabe der Personen
    void printPersList(PersListElement *p)
    {
        if(p==NULL)
            return
    
        printf("%d", p->pers_obj);
    }
    
    //In umgehekrter Reihenfolge
    void printReversePersList(PersListElement *p)
    {
    int i;
      if(p == NULL)
        return;
    
      printReversePersList(p->next);
    
      printf("Element: %d  ", p->pers_obj);
    
    }
    
    //In main werden dem struct folgende Inhalte mitgegeben
    
    p = insertPerson(p, "Mustermann", "Manfred");
    p = insertPerson(p, "Musterfrau", "Melanie");
    


  • Der Member pers_obj der struct perslistelement ist vom Typ person_t.

    Da das kein int ist, ist %d der falsche Formatspecifier.

    Du brauchst nicht suchen, für person_t gibt es keinen. Du musst die Member der struct einzeln ausgeben.
    Da dies vom Typ char[] (bzw. char* ) sind, kannst du da %s nehmen.

    Der Unterschied zwischen vorwärts und rückwärts, ist die Position vom printf (vor oder nach dem rekursiven Aufruf)



  • Und da ist ja mein Problem, wie gebe ich die Inhalte vom struct einzeln aus, wenn ich über pers_object darauf zugreifen muss?

    Wenn ich %d schreibe, gibt er mir eine Reihe von zahlen aus, bei %s bricht er bisher noch sofort ab.



  • printf("%s\n", p->pers_obj.name);
    printf("%s\n", p->pers_obj.vorname);
    


  • Wie greifst du auf die Member einer struct zu?

    Wenn du direkt eine struct hast, mit dem . Operator
    Bei einem Zeiger mit dem -> Operator.

    printf("%s", p->pers_obj.name);  // p Ist der Zeiger, pers_obj aber nicht
    


  • Achso. 😃

    Ja gut, da hat es gerade "klick" gemacht.
    Danke dir.


Log in to reply