Für die bessere Lesbarkeit stell ichs als Anhang mit rein
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übersprungen wird und gleich die Eingabe kommtCode:"Bitte Eingabe Operator"Hier mal das Programm:Code:"Bitte Eingabe Operand1"
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; }
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein - 14.03.1879 - 18.04.1955)
Für die bessere Lesbarkeit stell ichs als Anhang mit rein
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein - 14.03.1879 - 18.04.1955)
Eventuell ist das CR noch im Tatstaurpuffer und wird mittels scanf ausgelesen. Welchen Wert hat denn optr? Wird gar keine der Anfangs-Ausgaben erzeugt?
Rainer Hönle
DELTA LOGIC GmbH
Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)
gingele (31.12.2008)
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.
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein - 14.03.1879 - 18.04.1955)
Guck mal hier, da ist das Problem mit scanf beschrieben:
http://openbook.galileocomputing.de/...0025E21F04018C
gingele (31.12.2008),Rainer Hönle (31.12.2008)
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
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein - 14.03.1879 - 18.04.1955)
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') ....
Rainer Hönle
DELTA LOGIC GmbH
Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)
So funktioniert es leider auch nicht, die Funktion ist wie vorher.
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein - 14.03.1879 - 18.04.1955)
ok, kleine Änderung:
Code:optr=0; printf("\nBitte Eingabe Operator (+, -, *, /, q): "); while(optr!='q' && optr!='+' && optr!='-" && optr!='*' && optr!='/') { scanf ("%c", &optr); } if(optr!='q') ....
Rainer Hönle
DELTA LOGIC GmbH
Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)
gingele (31.12.2008)
Bookmarks