C++ Rechner Fehler



  • Ok ich danke für die Hilfe



  • Ich hab das Programm normal ganz neu programmiert.
    Das Menü klappt auch einwandfrei.
    Und die Zahlen kann ich auch eintippen.
    Nur wenn ich z.B auf 1 für addieren im Menü eingebe und meine Ganzzahlen eintippe.
    Rechnet mir das Programm die Zahlen nicht aus.
    Das ist bei den anderen 3 mathematischen Operatoren genauso.

    //Rechner
    
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
        int zahl1;
        int zahl2;
        int eingabe;
        int ergebniss;
    
        cout << "Plus rechnen <1>" << endl; 
        cout << "Minus rechnen <2>" << endl; 
        cout << "Mal rechnen <3>" << endl; 
        cout << "Geteilt rechnen <4>" << endl;
    
        cin >> eingabe;
    
        switch (eingabe)
    
        {
    
              case 1:
    
              cout << "Geben sie die erste Ganzzahl ein: " << endl;  // Addition
    
              cin >> zahl1; 
    
              cout << "Geben sie die zweite Ganzzahl ein: " <<endl; 
    
              cin >> zahl2; 
    
              ergebniss = zahl1 + zahl2; 
    
              break;  
    
              case 2:
    
              cout << "Geben sie die erste Ganzzahl ein: " << endl; // Subtraktion
    
              cin >> zahl1; 
    
              cout << "Geben sie die zweite Ganzzahl ein: " <<endl; 
    
              cin >> zahl2;
    
              ergebniss = zahl1 - zahl2; 
    
              break;
    
              case 3:
    
              cout << "Geben sie die erste Ganzzahl ein: " << endl; //Multiplikation
    
              cin >> zahl1; 
    
              cout << "Geben sie die zweite Ganzzahl ein: " <<endl; 
    
              cin >> zahl2;
    
              ergebniss = zahl1 * zahl2; 
    
              break;
    
              case 4:
    
              cout << "Geben sie die erste Ganzzahl ein: " << endl; // Division 
    
              cin >> zahl1; 
    
              cout << "Geben sie die zweite Ganzzahl ein: " <<endl; 
    
              cin >> zahl2;
    
              ergebniss = zahl1 / zahl2; 
    
              break;
    
                }           
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • Vielleicht solltest du das Ergebnis noch ausgeben? 😉

    PS: Deine Formatierung schaut aus wie bei Hempels unterm Sofa. Versuche, immer schön einzurücken... dann findet man Fehler auch viel schneller. Und zu viele Leerzeilen sind genauso wenig angebracht wie gar keine.

    PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?



  • Danke manchmal bin ich schon ein bischen neben der Spur.
    Mach ich 😉



  • Gugelmoser schrieb:

    PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?

    Falls ja, solltest du dir eine andere IDE (Code::Blocks oder Visual C++ 2010 Express) zulegen, da Dev-C++ veraltet ist, ein paar Bugs hat und nicht mehr weiterentwickelt wird.



  • Weswegen sehe ich eigentlich so oft ergebnis mit 2 "s"? Wobei ich ja result sowieso schöner finde 😉



  • wxSkip schrieb:

    Wobei ich ja result sowieso schöner finde 😉

    Ich nicht. Lateinische Wörter sind immer so seltsam in der Aussprache.



  • Ich weise nochmal auf den letzten Satz in meinem vorigen Beitrag hin:

    CStoll schrieb:

    Außerdem kannst du den Teil zur Eingabe der Operanden ("erste Ganzzahl" und "zweite Ganzzahl") vor diesem switch durchführen, die ist ja für alle Operationen identisch.

    Du hast insgesamt vier mal den selben Code zur Eingabe der Operanden, sowas sollte man vermeiden, weil es nur den Code aufbläht und fehleranfällig ist.



  • CStoll schrieb:

    Du hast insgesamt vier mal den selben Code zur Eingabe der Operanden, sowas sollte man vermeiden, weil es nur den Code aufbläht und fehleranfällig ist.

    Stimmt - man kann das wesentlich kürzer fassen. Auch was die Eingabe des Anwenders betrifft. Warum soll der denn zwischen 1,2,3 oder 4 wählen wenn er auch +,-,* und / eingeben kann:

    #include <algorithm> // std::find
    #include <iostream>
    
    struct BinaryOperation
    {
        template< typename T >
        T operator()( T a, T b ) const
        {
            switch( m_op )
            {
            case '+': return a + b;
            case '-': return a - b;
            case '*': return a * b;
            case '/': return a / b;
            }
            return T();
        }
        friend std::istream& operator>>( std::istream& in, BinaryOperation& op )
        {
            const char OPS[] = "+-*/";
            if( in >> op.m_op && std::find( OPS, OPS+sizeof(OPS), op.m_op ) == OPS+sizeof(OPS) )
                in.setstate( std::ios_base::failbit );
            return in;
        }
        friend std::ostream& operator<<( std::ostream& out, BinaryOperation op )
        {
            return out << op.m_op;
        }
    private:
        char m_op;
    };
    
    int main()
    {
        using namespace std;
        cout << "Plus rechnen: zahl1+zahl2 z.B. 3+4" << endl;
        cout << "Minus rechnen: zahl-zahl2 z.B. 45-12" << endl;
        cout << "Mal rechnen: zahl1*zahl2 z.B.: 12*71" << endl;
        cout << "Geteilt rechnen: zahl1/zahl2 z.B.: 34/2" << endl;
        BinaryOperation op;
        for( int zahl1, zahl2; cout << "\nIhre Rechnung: ", cin >> zahl1 >> op >> zahl2;  )
            cout << zahl1 << op << zahl2 << " = " << op( zahl1, zahl2 ) << endl;
        return 0;
    }
    

    Führt z.B. zu folgendem Dialog:

    Plus rechnen: zahl1+zahl2 z.B. 3+4
    Minus rechnen: zahl-zahl2 z.B. 45-12
    Mal rechnen: zahl1*zahl2 z.B.: 12*71
    Geteilt rechnen: zahl1/zahl2 z.B.: 34/2
    
    Ihre Rechnung: 1+1
    1+1 = 2
    
    Ihre Rechnung: 4893/7
    4803/7 = 699
    
    Ihre Rechnung: 123-24
    123-24 = 99
    

    Gruß
    Werner



  • Danke noch mal für das Beispiel!

    Gugelmoser schrieb:

    PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?

    Ja ich benutze Dev C++!




Anmelden zum Antworten