Funktionsprobleme



  • Tatsächlich, ich habe überall das "return" weggenommen, jetzt flieg ich nicht mehr raus, aber lande wieder im Hauptmenü ^^

    Hmmm ich glaub ich muss das irgendwie alles nochmal ändern...



  • ist ja klar das du wieder im Hauptmenu landest, da du dich ja noch in der while-Schleife befindest!



  • Danke für deine Hilfe, hab bisher immer gedacht das das anders geht



  • Helf' doch gerne :>



  • Sry jetzt muss ich nochmal nachbohren. Irgendwie bekomm ich das nicht in den Griff.
    Kann ich die Funktion nicht nochmal aufrufen weil ich Sie bereits aufgerufen habe ?
    Irgendwie versteh ich nicht woran es liegt das ich beim zweiten mal im Hauptmenü lande...vorallem weiss ich auch nicht wie ich das ändere.



  • Eigentlich musst du ja auch gar nicht mehr die Funktion aufrufen... da du dich noch in der while-Schleife(die in der main) befindest und so lange x!=0 bleibst du ja im Hauptmenu! Mach einfach mal stat return main(); nur return;
    Und nein, du kannst sie überhaupt nicht selber aufrufen! Sie wird automatisch aufgerufen, wenn du das Programm startest.
    Weil du wieder im Hauptmenu landest:
    Hier mal ein prinzipeller Ablauf
    1. Programm starten -> Hauptmenu wird ausgegeben (du befindest dich in der while-Schleige)
    2. Du wählst einen Menu-Punkt und die entsprechende Funktion wird aufgerufen( z.B Suchetag() )
    3. Die Funktion wird abgearbeitet, es wird evt. ein Untermenu aufgerufen, und Funktion wird verlassen.
    4. Du kehrst wieder zurück in deine while-Schleife, du gehst aus der switch-Anweisung heraus, verläßt die if-Anweistung und die while-Schleifen-Bedingung wird neu geprüft ( x ist immer noch ungleich 0 ) und dein Hauptmenu wird wieder neu ausgegeben!
    sorry, wenn ich es etwas umständlich formuliert haben



  • Achso sry, ich hab mich wohl nicht gut ausgedrückt, ich meine nicht warum ich dir main nicht mehr aufrufen kann, sondern, warum kann ich hier :

    ...
    
    if(j==1)
    	{
    
    	Tagspeichern(Interpret,Album,Song,Jahr);
    
    	}
    
    ...
    

    die Funktion nicht nochmal aufrufen. Das geht irgendwie nur das erste mal, dannach lande ich immer in der main, anstatt das der die Funktion Tagspeichern() wieder aufruft.



  • Ich nehme mal an, dass die first Instanz global ist! Bei ersten Mal ist diese NULL, nun holst du dir Speicher (via malloc) und in first ist nun die Adresse auf den Speicher darauf! Beim zweiten Mal prüfst du wieder, ob first gleich NULL ist... was jetzt aber nicht mehr der Fall ist, sondern es hängt ja noch der vorher allokierte Speicher dran! Deswegen ist die Bedingung in der if-Anweisung falsch und du machst dann ja nur noch ein return 0;
    Von daher, find ich es nachvollziehbar, das du beim zweiten Mal sofort wieder im Hauptmenu landest. Ich weis jetzt nicht genau was du damit machen willst. Soll es eine Liste werden?



  • Ich nehme mal an(wegen dem Namen list^^) das es eine sein soll... dann musst du nach dem ersten Durchlauf, den Pointer auf das nächste Element setzt ( ein neues Element, 'mit einem NULL-Pointer?')!



  • Jo genau, is natürlich noch nicht fertig, bin mehr oder weniger grad am herumprobieren mit den zeigern. Du kannst recht haben, verdammt, hab da gar nicht mit gerechnet das es am zeiger liegt das es nicht klappt.



  • tjaja... manchmal Sieht man den Code vor lauter Pointer nicht, was?^^



  • hehe so ungefähr, obwohl ja atm noch human ist :p

    Na ok jetzt weiss ich wo ich ansetzen muss, also nochmal vielen vielen Dank , hast mir echt geholfen ( jetzt gehts ins Bett 😃 )


Anmelden zum Antworten