Überspringen einer scanf_Anweisung in C

gingele

Level-1
Beiträge
227
Reaktionspunkte
42
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche gerade in den Ferien meine erlernten C-Kenntnisse zu festigen und Versuche einige Übungsaufgaben. Doch bei dieser Aufgabe stoße ich auf ein Problem wo ich nicht weiter weiß.
Ich soll einen Taschenrecher mit den Grundrechenarten programmieren, ist auch eigentlich nicht schwer, kappt soweit beim ersten Rechendurchgang auch, doch der Rechner soll erst beendet werden wenn als Operator q geschreiben wird, somit läuftder Rechner bei nicht eingabe q, beim ersten Durchgang, wieder von vorne los, doch diesesmal kann ich keinen Operator reinschreiben, da die scanf-Anweisung
Code:
"Bitte Eingabe Operator"
übersprungen wird und gleich die Eingabe kommt
Code:
"Bitte Eingabe Operand1"

Hier mal das Programm:
Code:
#include <stdio.h>
float calculate(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)
{
float opr1;
float opr2;
char optr='0';
float erg; 
while(optr!='q')
{
printf("\nEingabe: Operator <return> Operand1 <return> Operand2 <return>");
printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
scanf ("%c", &optr);
if(optr!='q')
{
printf("\nBitte Eingabe Operand1: ");
scanf ("%f", &opr1);
printf("\nBitte Eingabe Operand2: ");
scanf ("%f", &opr2); 
printf("\nErgebnis: %f %c %f = %f\n",opr1, optr, opr2, calculate(optr,opr1,opr2));
}
else
{
break;
}
}
return 0;
}
 
Doch es kommen beim zweiten Durchlauf dann die Ausgaben:


Eingabe: Operator <return> Operand1 <return> Operand2 <return>
Bitte Eingabe Operator (+, - *, /):
Bitte Eingabe Operand1:


quasi kann ich dann Operand1 eingeben aber keinen Operator, und wenn ich beim ersten Durchlauf z.b ein + reingeschrieben habe und halt dann einfach beim zweiten Durchgang die Operanden eingebe ist das + nicht mehr da.
 
Also das Problem habe ich erkannt, nach ner Lösung such ich jetzt mal, ich Versuch das Programm umzumodeln. Der Befehl fflush geht leider nicht da ich linux verwende, aber da ich jetzt weis wo das problem liegt weiß ich besser wie ich programmieren muß.

Danke nochmals und einen guten Rutsch.

gruß Frank
 
Prüf doch einmal den gelesenen Wert.
Code:
printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
while(optr!='q' && optr!='+' && optr!='-" && optr!='*' && optr!='/')
{
  scanf ("%c", &optr);
}
if(optr!='q') 
....
 
ok, kleine Änderung:
Code:
optr=0;
printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
while(optr!='q' && optr!='+' && optr!='-" && optr!='*' && optr!='/')
{
  scanf ("%c", &optr);
}
if(optr!='q') 
....
 
Danke Rainer, jetzt Funktioniert es, das heißt ja im optr war noch der vorher eingegebene Wert, oder. Sonst wär es ja nach deinem Vorschlag ohne optr=´0´; gegangen.
 
Es ist noch ne weitere Lösungsmöglichkeit, einfach beim scanf-Befehl eine Leertaste vorher eingeben quasi:

scanf("_%c", optr);

Hat mir heute ein Studienkollege verraten, der mal das selbe Problem hatte.
 
Zurück
Oben