Switch - Anweisung funktioniert nicht



  • Hallo das ist mein C++ Code

    #include <stdio.h>
    
    int main()
    
    {
        int zahl1, zahl2, erg = 0;
        char op;
    
        printf(" Bitte 1. Zahl eingeben:");
        scanf("%i", &zahl1);
    
        printf(" Bitte 2. Zahl eingeben:");
        scanf("%i", &zahl2);
    
        printf(" Bitte Rechenoperation auswaehlen:");
        scanf("%s", &op);
    
            //Switchcase Anweisung
    
            switch (op)
            {
                case '+':
                    erg = zahl1 + zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
                    break;
    
                case '-':
                    erg = zahl1 - zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                case '*':
                    erg = zahl1 + zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                case '/':
                    erg = zahl1 / zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                default:
                    printf("Sie haben keine Operation gewählt....\n");
                    break;
    
                    return 0;
    
            }
    
    }
    

    Das ist mein eAusgabe

    Bitte 1. Zahl eingeben:3
    Bitte 2. Zahl eingeben:3
    Bitte Rechenoperation auswaehlen:+
    Das Ergebnis Ihrer Rechnung lautet: 3

    Process returned 0 (0x0) execution time : 6.735 s
    Press any key to continue.

    Ich weiß nicht warum ich ein falsches Ergebniss bekommme

    Ich wäre für eine Antwort sehr dankbar



  • Ändere

    scanf("%s", &op);
    

    in

    scanf("%c", &op);
    


  • Zusätzlich folgende Dinge nach Durchsicht deines Codes:

    1. Spätestens wenn du Subtrahierst, wirst du zusätzlich Dividieren und Multiplizieren.
    2. Du wirst dich wundern was bei deiner Multiplikation raus kommt. Das Produkt der beiden Zahlen jedenfalls nicht.



  • #include <stdio.h>
    
    int main()
    
    {
        int zahl1, zahl2, erg = 0;
        char op;
    
        printf(" Bitte 1. Zahl eingeben:");
        scanf("%i", &zahl1);
    
        printf(" Bitte 2. Zahl eingeben:");
        scanf("%i", &zahl2);
    
        printf(" Bitte Rechenoperation auswaehlen:");
        scanf("%c", &op);
    
            //Switchcase Anweisung
    
            switch (op)
            {
                case '+':
                    erg = zahl1 + zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
                    break;
    
                case '-':
                    erg = zahl1 - zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                case '*':
                    erg = zahl1 + zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                case '/':
                    erg = zahl1 / zahl2;
                    printf(" Das Ergebnis Ihrer Rechnung lautet: %i\n ", erg);
    
                default:
                    printf("Sie haben keine Operation gewählt....\n");
                    break;
    
                    return 0;
    
            }
    
    }
    

    Jetzt bekomme ich das hier

    Bitte 1. Zahl eingeben:111
    Bitte 2. Zahl eingeben:222
    Bitte Rechenoperation auswaehlen:Sie haben keine Operation gewõhlt....

    Process returned 0 (0x0) execution time : 5.794 s
    Press any key to continue.



  • Deine Rechenoperation ist '\n'.

    siehe "Why does everyone say not to use scanf? What should I use instead?"
    http://c-faq.com/stdio/scanfprobs.html



  • scanf(" %c", &op);
    

    Beachte das Leerzeichen (dadurch werden Whitespaces überlesen)!



  • Danke für eure Hilfe

    Habe es etwas umgeändert

    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
        int zahl1, zahl2, erg = 0;
        char op;
    
        cout << " Bitte 1. Zahl eingeben: "<<endl;
        cin >> zahl1;
    
        cout <<" Bitte 2. Zahl eingeben: "<<endl;
        cin >> zahl2;
    
        cout <<" Bitte Rechenoperation auswaehlen: "<<endl;
        cin >> op;
    
            //Switchcase Anweisung
    
            switch (op)
            {
                case '+':
                    erg = zahl1 + zahl2;
                    cout<< " Das Ergebnis Ihrer Rechnung lautet: \n "<< erg <<endl;
                    break;
    
                case '-':
                    erg = zahl1 - zahl2;
                    cout<<" Das Ergebnis Ihrer Rechnung lautet: \n "  << erg<<endl;
                    break;
    
                case '*':
                    erg = zahl1 * zahl2;
                    cout<<" Das Ergebnis Ihrer Rechnung lautet: \n " << erg <<endl;
                    break;
    
                case '/':
                    erg = zahl1 / zahl2;
                    cout<<" Das Ergebnis Ihrer Rechnung lautet: \n " << erg <<endl;
                    break;
    
                default:
                    cout<<" Sie haben keine Operation gewählt....\n "<<endl;
                    break;
    
                    return 0;
    
            }
    
    }
    

    Jetzt klappt es

    Nur eine Frage wie kann ich es vehrindenr das er durch 0 teilt ?

    am besten durch eine do While schleife ?



  • case '/':
                    if(zahl2 == 0)
                    {
                       cout<<" Division durch 0 ist nicht erlaubt \n ";
                    }
                    else
                    {
                       erg = zahl1 / zahl2;
                       cout<<" Das Ergebnis Ihrer Rechnung lautet: \n " << erg <<endl;
                    }
                    break;
    


  • Vielen Dank



  • Nur hast du jetzt kein C mehr sondern C++



  • Hallo!

    Nimm doch zur Auswahl des Rechenoperators einen String her, da bei
    Betätigung der Enter-Taste ja auch das newline-Zeichen mit abgespeichert wird.
    Zur Selektion nimm einfach dann das erste Zeichen im String her: op[0]

    #include <stdio.h>
    
    int main()
    {
        int a, b, erg = 0;
        char op[5];
    
        printf(" Bitte 1. Zahl eingeben:");
        scanf("%i", &a);
        printf(" Bitte 2. Zahl eingeben:");
        scanf("%i", &b);
        printf("Bitte Rechenoperation auswaehlen:");
        scanf("%s", op);
    
       //Switchcase Anweisung
    
            switch (op[0])
            {
    
                default:
                    printf("Sie haben keine Operation gewählt....\n");
                    break;
    
                case '+':
                    erg = a + b;
                    break;
    
                case '-':
                    erg = a - b;
                    break;
    
                case '*':
                    erg = a * b;
                    break;
    
                case '/':
                    erg = a / b;
                    break;
    
          }
     printf("Aufgabe: %i %c %i = %i\n", a, op[0], b, erg);
    
     return 0;
    }
    


  • rustyoldguy schrieb:

    Nimm doch zur Auswahl des Rechenoperators einen String her, da bei
    Betätigung der Enter-Taste ja auch das newline-Zeichen mit abgespeichert wird.
    Zur Selektion nimm einfach dann das erste Zeichen im String her: op[0]

    Das ist nicht nötig, denn:

    Th69 schrieb:

    scanf(" %c", &op);
    

    Beachte das Leerzeichen (dadurch werden Whitespaces überlesen)!

    Damit ist das Leerzeichen vor dem % im Formatspecifier vom scanf gemeint.