scanf in Schleife wird "übergangen"



  • --------------------------------------------------------------------------------
    Das Programm läuft nun. Die Schleife wird korrekt durchlaufen. Bei Eingabe von 'q' beendet sich das Programm wie gewollt.

    **************************************************************************************************************************************************************

    Bitte Eingabe Operator(+, -, *, /, q): +
    Bitte Eingabe Operand1: 3.52
    Bitte Eingabe Operand2: 4.04
    Ergebnis: 7.56

    **************************************************************************************************************************************************************

    Jedoch wird nun beim Wiederholen der Schleife das scanf für die Eingabe des Operators einfach "übergangen". Das Programm gibt folgendes aus:

    **************************************************************************************************************************************************************

    Bitte Eingabe Operator(+, -, *, /, q): Bitte Eingabe Operand1:

    **************************************************************************************************************************************************************

    Wo liegt der Fehler, dass bei diesem zweiten Durchlauf der Schleife, das scanf nicht mehr berücksichtigt wird, und kein Operator mehr eingegeben werden kann?
    Hier der Quelltext:

    **************************************************************************************************************************************************************

    #include <stdio.h> 
    
    /*berechnung.c*/ 
    
    float berechnung(char optr, float opr1, float opr2) 
    { 
        float erg; 
    
        switch (optr) 
        { 
            case '+': erg = opr1 + opr2; 
                       break; 
            case '-': erg = opr1 - opr2; 
                       break; 
            case '*': erg = opr1 * opr2; 
                          break; 
            case '/': erg = opr1 / opr2; 
                      break; 
        } 
        return erg; 
    } 
    
    int main(void) 
    { 
        char optr; 
        float opr1,opr2,result; 
    
            while(optr!='q') 
            { 
                printf("Bitte Eingabe Operator(+, -, *, /, q): "); 
                scanf("%c", &optr); 
    
                if (optr!='q') 
                { 
                    printf("Bitte Eingabe Operand1: "); 
                    scanf("%f", &opr1); 
    
                    printf("Bitte Eingabe Operand2: "); 
                    scanf("%f", &opr2); 
    
                    result = berechnung(optr, opr1, opr2); 
    
                    printf("Ergebnis: %.2f\n", result); 
                } 
            } 
            return 0; 
    }
    


  • vlt. steckt noch ein 'RETURN' im Tastaturpuffer?? 😮



  • Ich glaub es hack.
    ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************



  • wieso wird er bei der ersten wiederholung der schleife das "scanf", also einlesen des operators einfach übersprungen?

    hat es vielleicht was mit der while-schleife zu tun?



  • coolzero0001 schrieb:

    vlt. steckt noch ein 'RETURN' im Tastaturpuffer?? 😮



  • Was coolzero damit ausdrücken wollte, ist: scanf() liest das nächste Zeichen, was noch im Eingabepuffer stand - und das ist noch das '\n', das von der letzten Abfrage nach opr2 übriggeblieben ist. Also mußt du noch deinen Puffer aufräumen, bevor du ordentlich weiterarbeiten kannst.

    ("fflush(stdin);" ist der falsche Weg - aber wenn du danach suchst, findest du bestimmt ne Möglichkeit, wie's richtig geht)

    @...: Ein paar *** weniger wären nett gewesen 😉


Anmelden zum Antworten