Erster Taschenrechner



  • Hallo, wir lernen an der Uni jetzt seit 2 Wochen C und ich komme bei einer Aufgabe nicht weiter.

    Programmieren Sie einen einfachen Taschenrechner. Ihr Taschenrechner soll nach dem Start ein Menü anzeigen, das sich an folgendem Schema orientiert:
    + = Addition
    * = Multiplikation
    - = Subtraktion
    / = Division
    x = Beenden

    Nach der Wahl einer Operation, fragt der Taschenrechner die beiden Operanden ab. Anschließend gibt er Term und Ergebnis der jeweiligen Operation auf der Textkonsole aus. Danach soll erneut das Menü angezeigt werden. Das Programm wird erst durch Wahl von "x" beendet.

    Wichtig: Der Taschenrechner soll ausschließlich ganze Zahlen verwenden und unterstützen. Überprüfen Sie daher vor der Berechnung, ob unter Verwendung der gegebenen Operation und Operanden ein Überlauf/Unterlauf eintritt, und geben Sie in einem solchen Fall einen Warnhinweis aus.

    Mein Code sieht bisher so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char eingabe;
        int erg;
        int a,b;
    
        printf("Willkommmen beim Taschenrechner \n");
        printf("Waehlen Sie eine der folgenden Operationen aus: + , - , * , / \n");
        printf("Zum beenden geben Sie bitte x ein\n");
    
        while(eingabe != 'x')
        {
    
            printf("Rechenzeichen eingeben: ");
            scanf("%c", &eingabe);
            fflush(stdin);
    
            printf("Geben Sie eine Zahl ein: \n");
            scanf("%d", &a);
            fflush(stdin);
            printf("Geben Sie eine weitere Zahl ein: \n");
            scanf("%d", &b);
    
            erg = a+b;
            printf("Ergebnis: %d\n", erg);
    
        }
    
    }
    

    Nur wenn ich als Rechenzeichen + eingebe bekomme ich als Ausgabe:

    Ergebnis:20
    Rechenzeichen eingeben: Geben Sie eine Zahl ein:
    

    Wieso überspringt er das "Rechenzeichen eingeben" und geht direkt zu "Geben Sie eine Zahl ein:

    Danke



  • Weil das '\n' von der Entertaste bei der Eingabe vom zweiten Wert noch im Eingabestrom steht.

    Füge ein Leerzeichen vor dem %c in Zeile 21 ein.

    scanf(" %c", &eingabe);
    //     ^ da
    

    Dies veranlasst scanf dazu, Whitespace zu überlesen.

    Das Verhalten von fflush(stdin) ist nicht im Standard definiert.
    Schau mal in die FAQ von diesem Unterforum: https://www.c-plusplus.net/forum/f21

    ^Wenn es bei dir funktioniert, dann hast du es genau im benötigten Fall vergessen.^



  • 😃
    da wäre ich ja nie und nimmer draufgekommen

    vielen Dank



  • codeblocks123 schrieb:

    😃
    da wäre ich ja nie und nimmer draufgekommen

    Darum hätte das in deinem Buch/Tutorial/Vorlesung auch behandelt werden müssen.

    Wenn nicht, wird es noch anderen Mängel haben.



  • das mit dem fflush steht als weiterer Hinweis in der Aufgabenstellung:

    Hinweis: Fügen Sie vor jedem scanf folgende Anweisung ein: fflush(stdin);
    

    Diese Aufgabe hat unser Prof. Dr. XXX an der Uni erstellt 😃



  • Tja, den Hinweis hast du ja nicht befolgt. Du hast das vor und das jedem nicht beachtet.

    Die wenigsten Profs haben Ahnung vom Programmieren.

    Das fflush(stdin) ist nämlich nicht nötig, wenn man es richtig macht.

    Siehe FAQ oder eine Referenz zu scanf: http://www.cplusplus.com/reference/cstdio/scanf/



  • Deine Variable "eingabe" ist zu Beginn nicht initialisiert und hat somit einen zufälligen Wert. Das könnte auch 'x' sein und dann ist dein Programm sofort beendet.



  • soweit ich das sehe hat Microsoft fflush im Visual Studio so abgeändert, dass es auch für Eingabeströme zulässig ist.

    mein Dozent hat den Hinweis auch gekonnt ignoriert, dass es woanders nicht definiert ist

    https://msdn.microsoft.com/de-de/library/9yky46tz.aspx

    // You must flush the input buffer before using gets. 
       // fflush on input stream is an extension to the C standard 
       fflush( stdin );
    

Log in to reply