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