[gelöst]Taschenrechner/ Problem mit Unterprogrammaufruf(if/else)



  • Hallo zusammen,

    ich wollte mir zum üben einen Taschenrechner schreiben, den ich im Laufe der Zeit weiter schreibe.

    Nun hab ich das Problem das egal welche Grundrechenart ich auswähle, (Eingabe), immer die Addition startet, obwohl die Bedingung (Eingabe ==1) sein sollte.

    Vielleicht weiß einer von euch woran das liegt?! 😕

    /*
      Name: Tim
      Copyright: nö
      Version: 1.1
      Date: 25.03.09 20:43
      Description: Taschenrechner
    */
    #include <cstdlib>     //Einbinden der C-Standartbibliothek
    #include <iostream>
    
    using namespace std;
    
    void Add(void);     //Unterprogramme global initialisieren
    void Sub(void);
    void Mul(void);
    void Div(void);
    int Eingabe;
    
    int main()
    {
              cout <<"*****TASCHENRECHNER*****" <<endl;
              cout <<"Wählen Sie eine Rechenfunktion" <<endl;
    
              cout <<" (1) Addition" <<endl;
              cout <<" (2) Subtraktion" <<endl;
              cout <<" (3) Multiplikation" <<endl;
              cout <<" (4) Division" <<endl;
    
        Eingabe = 0;
            cin >> Eingabe;
    
        if(Eingabe = 1);
        {
        Add();                                          //Aufruf Unterprogramm Addition
        }
        else(Eingabe = 2);
        {
        Sub();                                          //Aufruf Unterprogramm Subtraktion
        } 
        if(Eingabe = 3);
        {
        Mul();                                          //Aufruf Unterprogramm Multiplikation
        }
        else(Eingabe = 4);
        {
        Div();                                          //Aufruf Unterprogramm Division
        }
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    void Add(void)
    {
         cout <<"*****Addition*****" <<endl;
         cout <<"Bitte erste Zahl eingeben"<<endl;
         long zahl1 = 0;         //Definiere lokale Variable "zahl1" und setze auf 0
         long zahl2 = 0;         //Definiere lokale Variable "zahl2" und setze auf 0
         long Ergebnis = 0;      //Definiere lokale Variable "Ergebnis" und setze auf 0
    
         cin >> zahl1;
         cout <<"Bitte zweite Zahl eingeben"<<endl;
         cin >> zahl2;
         Ergebnis=zahl1+zahl2;
         cout <<"Das Ergebnis lautet" << Ergebnis <<endl;
    
    }
    
    void Sub(void)
    {
         cout <<"*****Subtraktion*****" <<endl;
         cout <<"Bitte erste Zahl eingeben"<<endl;
         long zahl1 = 0;         //Definiere lokale Variable "zahl1" und setze auf 0
         long zahl2 = 0;         //Definiere lokale Variable "zahl2" und setze auf 0
         long Ergebnis = 0;      //Definiere lokale Variable "Ergebnis" und setze auf 0
    
         cin >> zahl1;
         cout <<"Bitte zweite Zahl eingeben"<<endl;
         cin >> zahl2;
         Ergebnis=zahl1-zahl2;
         cout <<"Das Ergebnis lautet" << Ergebnis <<endl;
    }
    
    void Mul(void)
    { 
         cout <<"*****Multiplikation*****" <<endl;
         cout <<"Bitte erste Zahl eingeben"<<endl;
         long zahl1 = 0;         //Definiere lokale Variable "zahl1" und setze auf 0
         long zahl2 = 0;         //Definiere lokale Variable "zahl2" und setze auf 0
         long Ergebnis = 0;      //Definiere lokale Variable "Ergebnis" und setze auf 0
    
         cin >> zahl1;
         cout <<"Bitte zweite Zahl eingeben"<<endl;
         cin >> zahl2;
         Ergebnis=zahl1*zahl2;
         cout <<"Das Ergebnis lautet" << Ergebnis <<endl;
    }
    
    void Div(void)
    {  
         cout <<"*****Division*****" <<endl;
         cout <<"Bitte erste Zahl eingeben"<<endl;
         long zahl1 = 0;         //Definiere lokale Variable "zahl1" und setze auf 0
         long zahl2 = 0;         //Definiere lokale Variable "zahl2" und setze auf 0
         long Ergebnis = 0;      //Definiere lokale Variable "Ergebnis" und setze auf 0
    
         cin >> zahl1;
         cout <<"Bitte zweite Zahl eingeben"<<endl;
         cin >> zahl2;
         Ergebnis=zahl1/zahl2;
         cout <<"Das Ergebnis lautet" << Ergebnis <<endl;
    }
    

    ...ich hoffe jemand weiß Rat!? 😕

    Grüße Tim



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,

    auf Gleichheit prüfst du mit "==". In deinen if-Abfragen (Zeilen 34,38,42 und 46) steht allerdings der Zuweisungsoperator "=". C/C++ wertet eine durchgeführte Zuweisung als wahr, womit du mit deiner ersten if-Abfrage immer in der Addition landest.

    Viele Grüße, Chris



  • hallo, und Danke für die Antwort!

    Dies war auf jeden Fall schonmal ein Fehler. Aber beim kompilieren mekert er bei
    dem "else".

    ______________________
    38 D:\C++ Buch\Übung Taschenrechner\main.cpp expected primary-expression before "else"
    ______________________

    Änder ich alles in "if" führt er es aus aber wieder mit o.g Fehler... 😞

    Grüße Tim



  • Du musst dir Mal genau angucken wo du Klammern und ; setzt.

    Korrekt sollte das so aussehen:

    if(Eingabe == 1)
    {
      Add();
    } 
    else if (Eingabe == 2)
    {
      Sub();
    }
    else if (Eingabe == 3)
    {
      Mul();
    }
    else if (Eingabe == 4)
    {
      Div();
    }
    else {
      // Fehlermeldung ausgeben
    }
    

    -Wenn du nach einem else eine weitere Bedingung hinzufügen willst musst du erst ein neues if hinzufügen
    -Nach der schließenden Klammer einer if Bedingung kommt kein ;
    -Guck dir mal das switch Statement an
    -Wenn du die Bedingung andersrum formulierst kann der Fehler den du als erstes hattest nicht auftreten (also z.B. if (1 == Eingabe))



  • Kein Wunder. Du kannst Else keine Bedingung zuweisen. Else heisst, wenn das nicht ist und das nicht und das nicht wird immer Else ausgeführt, Else ist also sozusagen all das was passiert, wenn die If's und Else If's nicht zutreffen.



  • hey vielen Dank an Euch. Habs mal umgeschrieben:

    Eingabe = 0;
            cin >> Eingabe;
    
        if(1 == Eingabe)
                   {
                   Add();                                          //Aufruf Unterprogramm Addition
                   }
        else if(2 == Eingabe)
             {
             Sub();                                          //Aufruf Unterprogramm Subtraktion
             } 
        else if(3 == Eingabe)
             {
             Mul();                                          //Aufruf Unterprogramm Multiplikation
             }
        else if(4 == Eingabe)
             {
             Div();                                          //Aufruf Unterprogramm Division
             }
        else if(4 < Eingabe)
             {
             cout <<"FEHLER: Geben Sie 1,2,3 oder 4 ein" << endl; //Fehlerausgabe /Eingabe >4
             }
    

    funktioniert einwandfrei und danke für die schnelle Hilfe! 👍

    Grüße Tim



  • Wobei bei so einer Verschachtelung noch eine andere Fallabfrage zu erwähnen ist. Schau dir doch einfach mal switch-case an.



  • Hallo zusammen...

    hab mich mit

    switch ()
    case
    

    etwas vertraut gemacht. Hier mal mit dieser Variante:

    Eingabe = 0;
            cin >> Eingabe;
    
        switch (Eingabe)
               {
               case 1: Add();
               break; 
    
               case 2: Sub();
               break;
    
               case 3: Mul();
               break;
    
               case 4: Div();
               break;
    
               default: cout << "Der von Ihnen eingegebene Wert ist keiner Rechenfunktion zugeordnet. " <<endl;
                        cout << "Bitte versuchen Sie es erneut. " <<endl;
                        break;
    
               }
    

    Ist meiner Meinung nach viel eleganter, kompakter als mit if/else!
    Danke für den Tip ! 👍

    Grüße Tim



  • xorm_ schrieb:

    -Wenn du die Bedingung andersrum formulierst kann der Fehler den du als erstes hattest nicht auftreten (also z.B. if (1 == Eingabe))

    würde es nicht reichen, die warnungen anzuschalten? oder zu beachten!
    von dem umdrehen haklte ich gar gar nic. macht den code nur schwerlesbar.



  • kpvds schrieb:

    Ist meiner Meinung nach viel eleganter, kompakter als mit if/else!
    Danke für den Tip ! 👍

    Ich würde jetzt noch ein wenig an der Einrückung ändern (z.B. geschweifte Klammern), aber das ist natürlich Geschmackssache. 😉

    volkard schrieb:

    von dem umdrehen haklte ich gar gar nic. macht den code nur schwerlesbar.

    Genau. Ich finde es auch sehr hässlich, den Vergleich umzudrehen. Denn es ist von der Überlegung her nicht ganz das Gleiche, ob ich var auf Gleichheit mit 3 oder 3 auf Gleichheit mit var prüfe (so sehe ich das zumindest). Zudem geht das auch nur, wenn eine Seite nicht zuweisbar ist, z.B. weil const oder skalarer RValue.


Anmelden zum Antworten