Brauche hilfe mit Wiederholungen!



  • Hey, habe mal mit C++ angefangen, unzwar einen einfachen Taschenrechner.

    Nur habe ich jetzt ein Problem, wenn man einmal eine Rechnung durchführt, endet alles^^

    Hier mal der Source

    #include <iostream>
    
    using namespace std;
    
    char anweisung;
    int zahl1;
    int zahl2;
    int ergebnis;
    void Anweisungen()
    {
    cin >> zahl1;
    
    cout << "Jetzt die 2 Zahl" << endl;
    
    cin >> zahl2;
    
    cout << "nun wehlen sie bitte aus ob sie +, -, * oder / wollen!" << endl;
    
    cin >> anweisung;
    
    if (anweisung == '+' )
    {
    
    ergebnis = zahl1+zahl2;
    cout << ergebnis;
    }
    if (anweisung == '-' )
    {
    
    ergebnis = zahl1-zahl2;
    cout << ergebnis;
    }
    if (anweisung == '*' )
    {
    
    ergebnis = zahl1*zahl2;
    cout << ergebnis;
    }
    if (anweisung == '/' )
    {
    
    ergebnis = zahl1/zahl2;
    cout << ergebnis;
    }
    }
    void Zahlen()
    {
     cout << "Willkommen, das ist ein Taschenrechner" << endl;
    cout << "Bitte rechnen." << endl;
    cout << "-------------------------------------------------" << endl;
    cout << "1 / 2 / 3" << endl;
    cout << "4 / 5 / 6" << endl;
    cout << "7 / 8 / 9" << endl;
    cout <<"---/ 0 /--" << endl;
    }
    int main()
    {
    
    Zahlen();
    
    Anweisungen();
    
    return 0;
    }
    

    okay , habe es glaube jetzt selber herausgefunden ( durch rumprobieren)

    Ich habe jetzt

    return main();

    Ist das so ok?



  • Huhu

    #include <iostream>
    #include <limits>
    using namespace std;
    
    void Zahlen()
    {
        cout << "Willkommen, das ist ein Taschenrechner\n";
        cout << "Bitte rechnen.\n";
        cout << "-------------------------------------------------\n"; // verwende kein endl, wo \n gemeint ist.
        cout << "1 / 2 / 3\n";
        cout << "4 / 5 / 6\n";
        cout << "7 / 8 / 9\n";
        cout <<"--/ 0 /--\n";
    }
    
    void Anweisungen()
    {
        char anweisung; // Halte deine Variablen so lokal wie möglich.
        double zahl1;   // Wenn du auch eine Division machen willst ist eine Fließkommazahl wohl geeigneter.
        double zahl2;
        double ergebnis;
    
        cin >> zahl1;   // Deine vielen Leerzeilen machen es nicht wirklich übersichtlicher.
        cout << "Jetzt die 2 Zahl\n";
        cin >> zahl2;
        cout << "nun wehlen sie bitte aus ob sie +, -, * oder / wollen!\n";
        cin >> anweisung;
    
        switch(anweisung) // Für so eine Art von Auswahl ist eine swicht-Anweisung wohl besser geeignet.
        {
            case '+':
                ergebnis = zahl1+zahl2;
                break;
            case '-':
                ergebnis = zahl1-zahl2;
                break;
            case '*':
                ergebnis = zahl1*zahl2;
                break;
            case '/':
                ergebnis = zahl1/zahl2;
                break;
        }
        cout << ergebnis; // Du musst nicht in jedem Testfall das Ergebnis ausgeben, es reicht auch 1x am Ende.
    }
    
    int main()
    {
        Zahlen();
        Anweisungen();
    
        cin.ignore(numeric_limits<streamsize>::max(),'\n'); // Die noch im Puffer stehenden Zeichen verwerfen, dass das Programm dann auch anhält.
        cin.get(); // Programm anhalten
    }
    


  • Kinami37 schrieb:

    Ich habe jetzt

    return main();

    Ist das so ok?

    Was meinst du damit? In der main-Funktion darfst du return 0; weglassen, es wird dann automatisch gemacht. Ist aber nur bei der main-Funktion erlaubt.



  • einfach

    return main();

    so wird immer wieder am ende, main neu eingelegt^^



  • Kinami37 schrieb:

    so wird immer wieder am ende, main neu eingelegt^^

    😃 😃 nein, dann hast ja eine endlose Rekursion. Kennst du schon Schleifen (do while, while,for)? Damit kannst du Wiederholungen machen. 😉

    edit: Erlaubt der Standard überhaupt, dass man die main-Methode im Programm aufruft?



  • Nein, erlaubt er nicht.



  • Ja doch.. eben schon bei mir funktioniert es so...

    der code den ich gepostet habe, und return main(); ...



  • Das ist egal, der Stanard sagt trotzdem nein.



  • mir egal?

    Es funktioniert bei mir, also ist es mir egal was der Standard sagt...

    .. bitte closen



  • Kinami37 schrieb:

    mir egal?

    Es funktioniert bei mir, also ist es mir egal was der Standard sagt...

    .. bitte closen

    In diesem Fall wuerde ich auf den Standard hoeren.



  • seid ihr schwer von begriff?

    Wieso? Wieso sollte ich?

    So wie ich es gemacht habe funktioniert doch perfekt, wenn ihr mir nicht glaubt, nicht mein problem!

    return main(); klapt wunderbar!



  • Kinami37 schrieb:

    return main(); klapt wunderbar!

    Ja, heute und auf Deinem Compiler.
    Aber beim nächsten Compilerupdate könnte sich das ändern. Oder der Lehrer hat einen Compiler, wo es nicht klappt und gibt Dir eine 6.

    Sowas kann nicht passieren, wenn Du Code schreibst, der sich an den Standard hält. Der Standard ist halt das Buch, wo steht, was ein Compiler erlauben muß.

    Vor allem ist hier der Trick mit return main() nicht nötig, weil Schleifen auch nicht viel komplizierter sind.
    Statt

    int main()
    {
       //tuwas
       return main();
    }
    

    benutzt man eine Schleife

    int main()
    {
       while(1+1==2)
       {
          //tuwas
       }
    }
    

    (oder while(true) oder for(;;))



  • Das mit While verstehe ich noch nicht so ganz, und ich habe auch keinen Lehrer xD

    Naja gut, aber für diesen billig Taschenrechner, mach ich das jetzt nicht anders, bei großen sachen, natürlich aber bei sowas nicht.



  • Kinami37 schrieb:

    Naja gut, aber für diesen billig Taschenrechner, mach ich das jetzt nicht anders, bei großen sachen, natürlich aber bei sowas nicht.

    *facepalm*



  • Kinami37 schrieb:

    Naja gut, aber für diesen billig Taschenrechner, mach ich das jetzt nicht anders, bei großen sachen, natürlich aber bei sowas nicht.

    Programmierst du den Taschenrechner, um C++ zu lernen?



  • Du bist zwar ganz lustig, aber ich würde dir trotzdem raten mit rumprobieren aufzuhören und lieber was lesen. Buchempfehlungen findest du in diesem Forum genug. Ich verstehe nur nicht, warum du um Hilfe bittest, sie dann aber nicht annimmst...


Log in to reply