C++ Taschenrechner schließt sich sofort



  • Hey Leute,

    bin ein Anfänger im Programmieren und habe hier einen Taschenrechner mit Code::Blocks geschrieben.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        double zahl1, zahl2, ergebnis;
        char rechenzeichen;
    
        cout << "Taschenrechner 1.0" << endl;
    
        cout << "Gib eine Rechnung mit 2 Zahlen und einem Rechenzeichen ein." << endl;
    
        cin >> zahl1 >> rechenzeichen >> zahl2;
    
        switch(rechenzeichen)
        {
            case '+' : cout << zahl1 << " + " << zahl2 << " = " << zahl1+zahl2; break;
            case '-' : cout << zahl1 << " - " << zahl2 << " = " << zahl1-zahl2; break;
            case '*' : cout << zahl1 << " * " << zahl2 << " = " << zahl1*zahl2; break;
            case '/' : cout << zahl1 << " / " << zahl2 << " = " << zahl1/zahl2; break;
    
            default: cout << "Die Angaben sind ungültig!" ;
        }
    
        return 0;
    }
    

    Wenn ich das jetzt in Code::Blocks ausführe,
    dann funktioniert alles einwandfrei. Wenn ich
    das aber in dem Ordner als EXE starte dann schließt
    es sich sofort nach dem man das Ergebnis gesehen hat.
    Es schließt sich so schnell, dass man das Ergebnis kaum
    noch sieht. Ich habe es schon mit system("PAUSE"); versucht,
    er erkennt aber das "system" nicht. Und ich möchte noch eine
    Funktion einbauen, dass wenn man eine Rechnung gemacht hat,
    direkt noch eine machen kann, also ohne das er fragt, ob man
    noch eine machen will.
    Ich habe durch googlen herausgefunden das man das mit
    Schleifen macht, jedoch weiß ich nicht genau wie ich das hier
    bei mir anwenden muss. Hoffe jemand kann mir helfen. Danke im Voraus 🙂



  • Eine while-Schleife böte sich an. Erst mal eine endlose um die Eingabe und switch-Anweisungen. Später kannst Du dann auf eine weitere Taste prüfen, mit der Du die Schleife und damit das Programm verlassen kannst.



  • Und wie genau baue ich die da jetzt ein? Also was gehört in welche Zeile? Und kannst du mir vielleicht noch sagen, wieso sich das Programmm denn sofort schließt, nachdem es seinen Zweck erfüllt hat? Normalerweise sagt er ja dann "Drücken sie eine beliebige Taste...".



  • Es gibt verschiedenste Konstrukte, um das Konsolenfenster offen zu halten. Vielleicht funktioniert z.B. das hier für dich:

    std::cin.ignore(1); // das '\n', welches von der letzten Eingabe noch im Stream ist überspringen
    std::cout << "\nDruecken sie die <Enter> Taste, um das Fenster zu schliessen...";
    std::cin.get();  // Zeichen lesen
    
    // weitere Möglichkeit:
    char ch;
    cin >> ch;  // man muss ein Zeichen eingeben und <Enter> drücken um das Fenster zu schließen.
    

    Am besten du packst die einmalige Rechenoperation in eine Funktion, und führst diese so lange aus, bis der Nutzer durch eine definierte Eingabe entscheidet das Programm zu beenden.

    z.b.

    while (cin >> ersteZahl >> op >> zweiteZahl)
    {
        // berechnen
    }
    


  • @Harteware hat super funktioniert, dankes 😃
    Ich habe das hier benutzt:
    "

    std::cin.ignore(1); // das '\n', welches von der letzten Eingabe noch im Stream ist überspringen
    std::cout << "\nDruecken sie die <Enter> Taste, um das Fenster zu schliessen...";
    std::cin.get();  // Zeichen lesen
    

    "

    Könntest du mir vielleicht noch genau erklären, warum das jetzt funktioniert hat und welche Zeile was macht?



  • xLogiaa schrieb:

    Und kannst du mir vielleicht noch sagen, wieso sich das Programmm denn sofort schließt, nachdem es seinen Zweck erfüllt hat? Normalerweise sagt er ja dann "Drücken sie eine beliebige Taste...".

    Das ist eine Funktion von CodeBlocks, das Fenster bis Tastendruck offen zu lassen. Wenn Du das Programm außerhalb startest, ist ja keine derartige Anweisung drin.



  • Alles klar, habs kapiert, danke 😃



  • Könntest du mir vielleicht noch genau erklären, warum das jetzt funktioniert hat und welche Zeile was macht?

    Ich hatte hier bis vor kurzem ca. 50 Zeilen Erklärung etc. stehen. Bin aber zum Schluss gekommen, dass du es am besten selbst nachschauen solltest. Denn so lernst du selbst Fragen zu beantworten und es muss nicht jedes Mal jemand die Information zusammenstellen. Da gibts ja dieses Sprichwort mit Fisch geben vs Fischen beibringen etc. Du musst nur die Funktion über die du mehr erfahren möchtest in eine Suchmaschine eingeben (o.a. eventuell verbunden mit "c++" oder "cin").

    Falls du danach immernoch konkrete Fragen haben solltest, werden diese hier bestimmt beantwortet.

    Ein Beispiel für eine konkrete Frage wäre: "Ich verwende >> und anschließend getline(). Das mit >> funktioniert prächtig, das getline wird aber irgendwie übersprungen und lässt mich garnichts eingeben, wieso?"



  • Ja du hast recht. Werde es das nächste Mal so machen, danke nochmal 😃


Log in to reply