Programm sauber beenden



  • Hi.
    Ich rufe eine Klasse auf, der User macht Eingaben. Wenn er x-mal falsche Eingaben macht soll sich das Programm beenden. So weit so gut, doch das Problem ist, wenn ich mit return(0) beende dann springt der ja zur nächsten Anweisung und das Programm beendet sich ja nicht. Bei mir macht er es jedenfalls so.
    Und exit( ) zerstört keine dynamischen Objekte, was ja auch unschön ist.

    Wie macht man es richtig.

    Pseudocode:
    main()
    class1:func1 -> Eingabe -> bei OK weiter zu
    func2 -> blah blah
    Die Eingaben werden geprüft, und bei Korrektheit wird die nächste Klasse aufgerufen. Wenn nicht korrekt soll das Programm beendet werden.
    Wie gesagt, im Moment springe ich mit exit( ) raus.



  • Hmm, mit ner exception gehts aber ich denke niht dass das für solche Zwecke gedacht ist... kannst niht der funktion einen Rückgabewert geben, der besagt, dass die eingabe falsch war und eben dann return 0 in der main aufrufen?



  • Hm, die Frage ist nur, wie realisiert man so was? Ich weiß ja nicht wie ich in main reinspringen kann um dann return(0) auf zu rufen, befinde mich ja so zu sagen in der Klasse.



  • bool klasse::member1(){
        //...
        if(falscheeingabe)
            return false;
        else{
            member2();
            //...
        }
        //...
    }
    
    int main(){
        if(!klasse::member1())
            return 0;
    }
    

    so in der Art dachte ich halt. Ich weisz aber nicht ob es in deinem Fall geht.



  • Du könntest in der Methode, wie schon gesagt, eine Exception werfen. Die könntest du dann in der main-Funktion abfangen und darauf reagieren (z.B. ausgeben, dass zu viele Versuche genutzt wurden). Und dann wird das Programm sowieso beendet.

    class too_much_tries : public std::runtime_error
    {
        string what()
        {
            return "Too much tries";
        }
    };
    
    class x
    {
        methode()
        {
            if(zu viele Eingaben)
                throw too_much_tries;
        }
    };
    
    int main()
    {
        x y;
        try
        {
            y.methode();
        }
        catch(too_much_tries e)
        {
            cout << e.what();
        }
    }
    

    edit: Beispiel

    edit2: Guck dir mal http://www.cplusplus.com/doc/tutorial/exceptions.html und http://www.fredosaurus.com/notes-cpp/exceptions/exceptions.html an. Ersteres über Exceptions allgemein und zweiteres über die Exceptionklassen des c++-Standards.



  • Jetzt verstehe ich. Muss ich mir mal Gedanken machen, ich habe zwar fast nur void-Funktionen, aber man kann ja zusätzlich was einbauen. Die Idee ist aber gut, werde ich mal testen.

    Danke.

    Trotzdem aus Interesse, gibt es keinen sauberen Ausstieg außer return(0)?
    Exceptions kenne ich zwar noch nicht, doch in dem Fall wäre es ja sowieso kein Fehler vom Programm, sondern ein gewollter Ausstieg. Egal ob es Sinn macht oder nicht, hätte ja auch ein Menü sein können in dem der User angibt das er/sie/es Beenden will.



  • Den Post von viande hatte ich beim Abschicken noch nicht gesehen.


Anmelden zum Antworten