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


Anmelden zum Antworten