Simpler Taschenrechner macht Probleme



  • Hallo mal an alle 😉

    Ich bin neu hier.

    Seit einigen Wochen habe ich mit c++ angefangen.

    Nun wollte ich einen Taschenrechner programmieren.

    Hier mal meine Version^^

    int main()
    {
    int zahl1,zahl2, erg;
    int rz;
    cout<<"1.zahl";
    cin>>zahl1;
    cout<<"2.zahl";
    cin>>zahl2;
    
    if (rz='+')
    erg=zahl1+zahl2;
    
    if(rz='-')
    erg=zahl1-zahl2;
    
    cout<<"+ oder -";
    cin>>rz;
    cout<<erg;
    
    }
    

    So sieht das bei mir aus.
    Das Problem: Der Rechner rechnet nur minus, auch wenn ich plus eingebe 😃

    Was ist da falsch?
    Ich denke irgendwo fehlen klammern

    mfg

    mfg



  • in if-Abfragen muss man == verwenden, da du mit = nur eine Zuweisung machst und keinen Vergleich. rz sollte auch ein Char sein! Die Reihenfolge stimmt nicht, du machst die EIngabe nach der Auswertung...



  • aso mal danke.

    aber was meinst du mit der reinfolge?

    mfg



  • Ein Programm wird quasi immer von oben nach unten ausgeführt (bildlich), wenn du also die Eingabe von rz nach der Nutzung von if( rz == '+') machst, wie du es tust, dann hat dein Programm undefiniertes Verhalten. Du musst natürlich deine Eingabe vor der Abfrage machen, damit der Wert auch überprüft werden kann.

    Dein code mit Kommentaren:

    int main()
    {
    int zahl1,zahl2, erg;
    int rz; //zr wird definiert aber nicht initialisiert und kann theoretisch jeden Wert haben.
    cout<<"1.zahl";
    cin>>zahl1;
    cout<<"2.zahl";
    cin>>zahl2;
    
    if (rz='+') //rz hat hier noch immer einen beliebigen Wert! macht nicht sinn oder?
    erg=zahl1+zahl2;
    
    if(rz='-')//rz hat hier noch immer einen beliebigen Wert! macht nicht sinn oder?
    erg=zahl1-zahl2;
    
    cout<<"+ oder -";
    cin>>rz; // Ab hier entspricht rz der Eingabe des Benutzers
    cout<<erg; // Das Ergebnis ist nicht bestimmt und eher zufällig
    
    }
    


  • HighLigerBiMBam schrieb:

    int rz; //zr wird definiert aber nicht initialisiert und kann theoretisch jeden Wert haben.
    if (rz='+') //rz hat hier noch immer einen beliebigen Wert! macht nicht sinn oder?
    if(rz='-')//rz hat hier noch immer einen beliebigen Wert! macht nicht sinn oder?
    

    Du hast es zwar schon einmal explizit erwähnt, aber trotz allem würde ich Kommentare mit ihrem Bezug zu synchronisieren (" == " statt " = ").



  • Hallo,

    Auf Anhieb sehe ich drei Probleme, nämlich:

    1. Du liest das Rechenzeichen in die Variable 'rz' nicht ein.
    2. Die Variable 'rz' ist vom Typ int, sollte aber char sein
    3. Du benutzt den Operator '=' in deinen if-Abfragen, statt '=='

    Gruss,

    samyboy



  • es ist ja nicht so, dass dies schon vor 3 Stunden geposted wurde @ Sammy



  • So sollte das ganze funktionieren:

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    float zahl1, zahl2
    char rz;
    //Eingabe
    cout<<"1.zahl"; 
    cin>>zahl1; 
    cout<<endl;
    cout<<"2.zahl"; 
    cin>>zahl2;
    cout<<endl; 
    
    cout<<"+ oder -"; 
    cin>>rz;
    
    //Verarbeitung
    if (rz == '+') 
    erg = zahl1 + zahl2; 
    
    if(rz == '-')
    erg = zahl1 - zahl2; 
    
    //Ausgabe
    cout<<endl<<erg;
    
    }
    

    Ich hab anstelle von int, float geschrieben damit du auch sehr sehr sehr große zahlen rechnen kannst.


Anmelden zum Antworten