c++: einfacher Taschenrechner

  • c++: einfacher Taschenrechner

    Hallo
    ich verstehe einfach nicht warum es nicht funzt, vieleicht ist es schon zu spät aber ich komm nicht drauf.
    er gibt immer nur die rechnung a+b aus auch wenn ich r=2 bzw 3 oder 4 setze.
    [Wollte ursprünglich direkt die befehle +-*/ eingeben können.
    hatte dafür r als char deklariert und es entsprechend in den if sätzen verändert aber dann kamen fehlermeldeungen das etwas mit meinen if sätzen nicht stimmt.]
    Arbeite mit visual studio 2008
    bitte um hillfe
    vielen dank im vorraus
    ost


    #include <iostream>
    using namespace std;
    int main ()
    {
    double a, b, e ;
    int r ;
    cout << "Bitte geben sie zwei ganze Zahlen ein" << endl;
    cin >> a >> b ;
    cout << "Bitte geben sie die Zahl 1 für add 2 für sub 3 für mult oder 4 für div ein" << endl;
    cin >> r ;
    if(r=1)
    e=a+b ;
    else if(r=2)
    e=a-b ;
    else if(r=3)
    e=a*b ;
    else if(r=4)
    e=a/b ;
    cout << e << endl;
    return 0 ;
    }
  • Du hast es erkannt, ist aber zu Beginn vielen passiert:

    Quellcode

    1. if(r=1)


    In dieser Zeile und den gleichen fehlt ein Zeichen - schau dir das in einem Buch oder einem Tutorial noch mal an ;)

    Wenn du es so

    Quellcode

    1. if(1=r)


    eingegeben hättest, sollte dich dein Compiler informieren, das was nicht passt.

    Wenn du das richtig angehst, geht die Auswahl auch mit +, -, * u.s.w.

    MfG bcc-fan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan () aus folgendem Grund: Ergänzung

  • Hast du dir meinen Beitrag durchgelesen und verstanden?

    Welches Zeichen fehlt in der von mir kopierten Zeile und 3 weiteren?
    Wenn du es gefunden hast, kompiliere deinen Quelltext und schau ob der funktioniert.
    Wenn nicht, schreib präzise was klemmt.

    Mit "switch" geht es bei umfangreichen Auswahlmöglichkeiten eleganter und ist oft, wenn du den Quelltext ( nein, nicht die Festplatte ) richtig formatierst, übersichtlicher.

    MfG bcc-fan
  • Taschenrechner funzt danke für die hilfe.
    Quellcode sieht jetzt so aus.

    #include <iostream>
    using namespace std;
    int main ()
    {
    double a, b, e ;
    int r ;
    cout << "Bitte geben sie zwei ganze Zahlen ein" << endl;
    cin >> a >> b ;
    cout << "Bitte geben sie die Zahl 1 für add 2 für sub 3 für mult oder 4 für div ein" << endl;
    cin >> r ;
    if(1==r)
    {
    cout << a+b ;
    }
    else if(2==r)
    {
    cout << a-b ;
    }
    else if(3==r)
    {
    cout << a*b ;
    }
    else if(4==r)
    {
    cout << a/b ;
    }
    return 4 ;
    }

    Kann aber immer noch nicht die auswahl über die Zeichen +-*/ auswählen obwohl ich char r dekl. und die bedingungen in den ifanweisungen änderin if (+==r)
    es wird mir diese Fehlermeldung ausgegeben.

    ich gebe diesen quellcode ein.
    wäre supi wenn man mir nochmal helfen könnte.

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    using namespace std;
    int main ()
    {
    double a, b, e ;
    char r ;
    cout << "Bitte geben sie zwei ganze Zahlen ein" << endl;
    cin >> a >> b ;
    cout << "Bitte geben sie die Zahl 1 für add 2 für sub 3 für mult oder 4 für div ein" << endl;
    cin >> r ;
    if(+==r)
    {
    cout << a+b ;
    }
    else if(-==r)
    {
    cout << a-b ;
    }
    else if(*==r)
    {
    cout << a*b ;
    }
    else if(/==r)
    {
    cout << a/b ;
    }
    return 4 ;
    }
    Bilder
    • Unbenannt.png

      29,65 kB, 960×540, 354 mal angesehen
  • Ein wenig mehr Einsatz kann nicht schaden ;)

    Ein paar Kommentare im Quelltext:

    Quellcode

    1. #include <iostream>
    2. #include <stdio.h> // warum ist dieser C-Header hier ??
    3. #include <math.h> // für diese einfachen Sachen nicht nötig
    4. using namespace std;
    5. int main ()
    6. {
    7. double a, b, e ;
    8. char r ;
    9. cout << "Bitte geben sie zwei ganze Zahlen ein" << endl;
    10. cin >> a >> b ;
    11. cout << "Bitte geben sie die Zahl 1 für add 2 für sub 3 für mult oder 4 für div ein" << endl;
    12. cin >> r ;
    13. if('+'==r)
    14. {
    15. cout << a+b ;
    16. }
    17. else if('-'==r)
    18. {
    19. cout << a-b ;
    20. }
    21. else if('*'==r)
    22. {
    23. cout << a*b ;
    24. }
    25. else if('/'==r)
    26. {
    27. cout << a/b ;
    28. }
    29. return 4 ; // warum 4?
    30. }
    Alles anzeigen


    Es sind noch genug Reserven für schöneren Code da ;)
    Vergiss die eine Zeile nicht anzupassen.
    Nutze die Code-Tags hier C&C++

    MfG bcc-fan
  • Ich habe es noch einmal vereinfacht. So ist der taschenrechner benutzerfreundlicher. Falls du etwas nicht verstehst, frag. Ich habe anstatt mehrer if abfragen switch verwenden. Für solche Fälle gibt es ja switch

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main ()
    4. {
    5. double a, b, e ;
    6. char r ;
    7. cout << "Bitte geben sie ihre Rechnung ein (nur +,-,*,/)" << endl;
    8. cin >> a >> r >> b ; //der Benutzer gibt alles in einer zeile ein
    9. switch(r)
    10. {
    11. case '+': cout << a+b << endl;
    12. break;
    13. case '-': cout << a-b << endl;
    14. break;
    15. case '*': cout << a*b << endl;
    16. break;
    17. case '/': cout << a/b << endl;
    18. break;
    19. default:cout << "Nicht unterstützte Rechnung!" << endl;
    20. return 1; //teilt dem Programm mit, dass etwas nicht stimmt
    21. }
    22. return 0; // sagt dem Programm, dass alles richtig verlief
    23. }
    Alles anzeigen
  • Morgen, an alle C++ Freunde, ich habe aus dem if-else Taschenrechner auch noch was ganz tolles gebastelt, ganz ohne Switch und Case!

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main ()
    4. {
    5. double a, b;
    6. char r ;
    7. const unsigned char UE = static_cast<unsigned char>(154);
    8. //habe ich hier gefunden: http://www.c-plusplus.de/forum/viewtopic-var-t-is-39326.html
    9. cout << "Bitte geben sie die Rechnung ein (nur +,-,*,/)" << endl;
    10. cout << "Beenden Sie, indem Sie an beide Zahlen 0 " << UE << "bergeben" << endl;
    11. while( a and b != '0')
    12. //Solange a und b keine Null als Wert haben, geht das Programm von vorne los.
    13. {
    14. cin >> a >> r >> b ; //Hier die Benutzereingabe.
    15. cout << endl;
    16. if (a and b == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0');
    17. //Hier überprüft die if Anweisung, ob a und b wirklich Zahlen sind!
    18. else return 1;
    19. //Sind a und oder b keine Zahlen, wird das Programm beendet.
    20. if('+'==r)
    21. {
    22. cout << a+b << endl;
    23. }
    24. else if('-'==r)
    25. {
    26. cout << a-b << endl;
    27. }
    28. else if('*'==r)
    29. {
    30. cout << a*b << endl;
    31. }
    32. else if('/'==r)
    33. {
    34. cout << a/b << endl;
    35. }
    36. else return 1;
    37. // Wird ein anderes Zeichen als +, -, * oder / benutzt, schließt sich das Programm!
    38. }
    39. return 0 ;
    40. }
    Alles anzeigen
    Dateien
    Du bist Terrorist, warum? Siehe hier
  • Quellcode

    1. while( a and b != '0')
    2. if (a and b == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0')

    also diese beiden Zeilen funktionieren nicht so, wie das vielleicht gedacht war.
    a and b != '0' wird ausgewertet zu: wenn a wahr ist und b nicht das Zeichen 0. Zahlenwerte sind übrigens immer wahr wenn sie nicht 0 sind.
    die zweite Zeile ist noch schlimmer: die ist wahr wenn a wahr ist und b das Zeichen 1, oder einfach nur wenn '2' wahr ist. Da '2' immer wahr ist, ist auch der Ausdruck konstant wahr, die if-Abfrage kann man sich also schenken.

    Und dann: warum nur einstellige Zahlen zulassen? Das ist doch ziemlich langweilig...
    Auchnoch unschön: Du vergleichst double-Werte (a,b) mit Charakter-Werten. Das kann zwar Syntaktisch vielleicht irgendwie funktionieren, schön ist das aber nicht und wird auch nicht immer die erwarteten Ergebnisse bringen.
  • Ihr habt ja recht... :wacko:

    Aber das mit der While Schleife ist richtig, wenn Sie beide ungleich 0 sind wird die Schleife ausgeführt, sonst beendet, was ja auch sein soll.
    Ansonsten habt ihr recht. Das lasse ich mir irgendwann noch mal durch den Kopf gehen, weiß auch nicht, wie ich darauf gekommen bin...

    Quellcode

    1. if (a and b == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0');
    2. //Hier überprüft die if Anweisung, ob a und b wirklich EINSTELLIGE Zahlen sind!
    3. else return 1;
    4. //Sind a und oder b keine EINSTELLIGE Zahlen, wird das Programm beendet.


    mfg Pokertom

    edit: bei mir klappts auch mit mehr Zahlen, auch wenn es unlogisch ist, aber kompiliert es trotzdem mal und probiert es aus, ich benutze den Dev- C++ Compiler von Bloodsheed;
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von pokertom ()