Struct und Rekursive Funktionen
-
Hallo, warum werden wenn ich die Fuktion
void print_by_tail(struct ListElem *Tail)
aufrufe nur die Listen "help" und "test ausgegeben?
Ich würde gerne alle Listen ausgeben.#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> //Aufgabe 1: Globale Deklaration struct ListElem{int Prio; char *name; struct ListElem *next;}; //Aufgabe 2: Definieren und Vorbelegen struct ListElem Liste = {10, "Andreas Gruber", NULL}; //Unterfunktion zur Aufgabe 3 void printList(struct ListElem *Zeiger) { printf("Name: %s\nPrioritaet: %d\nVerkettungsinfo: %p\n", Zeiger->name, Zeiger ->Prio, Zeiger ->next); printf("\n\n"); } //Unterfunktion zur Aufgabe 6 void print_by_tail(struct ListElem *Tail) { if (Tail != NULL) { printf("Name: %s\nPrioritaet: %d\nVerkettungsinfo: %p\n", Tail -> name, Tail -> Prio, Tail->next); printf("\n"); printList(Tail -> next); } } void main() { //Aufgabe 2: Ausgabe printf("Groesse der Auftrags-Variablen in Byte: %d",sizeof(Liste.Prio)); printf("\nName: %s",Liste.name); printf("\nPrioritaet: %d", Liste.Prio); printf("\nAdresse des Zeiger in Hex: %p", &Liste.next,"\n\n\n"); //Aufgabe 3: Ausgabe über Unterfunktion printf("\n\nAusgabe ueber Unterfunktion:\n\n"); printList(&Liste); // <= Warum fehler wenn & entfernt wird? //Aufgabe 4: Liste von Elementen dynamisch erzeugen struct ListElem *root; // struct *root wird erzeugt root = (struct ListElem *) malloc(sizeof(struct ListElem)); // Speicherbedarf wird reserviert, struct wird zugewiesen root->name = (char *) malloc(strlen("Eva-Maria Hierlmeier ")); //Speicherbedarf für Name wird ermittelt und zugewiesen strcpy(root->name, "Eva-Maria Hierlmeier"); root->Prio = 12; root->next = Liste.next; printList(root); //Ausgabe über Unterfunktion //Aufgabe 5: Neue Elemente vorne einketten struct ListElem *help; help = (struct ListElem *) malloc(sizeof(struct ListElem)); // Speicherbedarf wird reserviert, struct wird zugewiesen help->name = (char *) malloc(strlen("Anna Gruber ")); //Speicherbedarf für Name wird ermittelt und zugewiesen strcpy(help->name, "Anna Gruber"); help->Prio = 6; help->next = root; printList(help); //Aufgabe 7 struct ListElem *test; test = (struct ListElem *) malloc(sizeof(struct ListElem)); // Speicherbedarf wird reserviert, struct wird zugewiesen test->name = (char *) malloc(strlen("Honighase ")); //Speicherbedarf für Name wird ermittelt und zugewiesen strcpy(test->name, "Honighase"); test->Prio = 69; test->next = help; printList(test); //Aufgabe 6: Unterprogramm zur Ausgabe einer Liste printf("Unterprogramme zur Ausgabe einer Liste: \n\n"); print_by_tail(test); getch(); }
-
In Zeile 31 wolltest du wohl print_by_tail aufrufen.
Wegen Zeile 46. "Liste" ist eine normale Instanz, kein Zeiger. Die Funktion braucht aber einen Zeiger.
Zeile 55: Soll root->next = NULL sein?
Zudem gibt main immer nen int zurück.
-
Danke, jetzt läufts so weit.
Zeile 55: Werde ich noch anpassen.
lagalopex schrieb:
Zudem gibt main immer nen int zurück.
Meinst du bei den Funktionen dennen ich void als Rüchgabewert zugeteilt habe?
-
Ich meine Zeile 35.
Da sollte es in der Art "int main()" stehen.
-
Ok, hab ich geändert.
Dickes Danke