Code: Rechner funktioniert nicht
-
Hi!
Hab gerade spaßeshalber mal um mir Funktionen näher zu bringen einen Rechner mit einer solchen geschrieben.
Nur leider haut das nicht hin!
Weiß jemand woran es liegen kann?
#include <stdio.h> #include <math.h> float rechner(float zahl1,float zahl2,char op){ int ergebnis = 0; switch(op){ case '+': ergebnis = zahl1+zahl2; break; case '-': ergebnis = zahl1-zahl2; break; case '*': ergebnis = zahl1*zahl2; break; case '/': ergebnis = zahl1/zahl2; break; } return ergebnis; } int main(){ float zahl1=0,zahl2=0,ergebnis=0; char op; printf("T A S C H E N R E C H N E R\n\n\n"); printf("Der Rechner kann gaenginge arithmetische Operationen ausfuehren.\nBitte Geben Sie die erste Zahl ein:\n"); scanf("%f",&zahl1); printf("Bitte geben Sie die auszufuehrende Operation ein (+,-,*,/) :\n"); scanf("%c",&op); printf("Bitte geben Sie die zweite Zahl ein:\n"); scanf("%f",&zahl2); ergebnis = rechner(zahl1,zahl2,op); printf("Das Ergebnis lautet: %f %c %f = %f",&zahl1,&zahl2,&op,&ergebnis); return 0; }
-
Nimm die &-Zeichen im printf-Aufruf weg. Und gib nächstes mal die Fehlermeldung an bzw. beschreibe das Fehlverhalten.
-
Dein printf ist falsch (siehe mein code).
Außerdem (dein größtes Problem) musst du den input buffer irgendwie leeren. Denn sonst wird wenn das Rechenzeichen eingelesen wird gleich das '\n' vom letzten mal genommen..void clear() { int c = 0; while(c!= EOF && c != '\n') { c = getchar(); } } int main(){ float zahl1=0,zahl2=0,ergebnis=0; char op; printf("T A S C H E N R E C H N E R\n\n\n"); printf("Der Rechner kann gaenginge arithmetische Operationen ausfuehren.\nBitte Geben Sie die erste Zahl ein:\n"); scanf("%f",&zahl1); printf("Bitte geben Sie die auszufuehrende Operation ein (+,-,*,/) :\n"); clear(); scanf("%c",&op); printf("Bitte geben Sie die zweite Zahl ein:\n"); scanf("%f",&zahl2); ergebnis = rechner(zahl1,zahl2,op); printf("Das Ergebnis lautet: %f %c %f = %f",zahl1,op,zahl2,ergebnis); return 0; }
-
Bashar schrieb:
Nimm die &-Zeichen im printf-Aufruf weg. Und gib nächstes mal die Fehlermeldung an bzw. beschreibe das Fehlverhalten.
Hat leider noch nicht zum Erfolg geführt.
Nun wird mir lediglich die erste eingegebene Zahl angezeigt. Das char-Zeichen wird nicht mit ausgegeben, die zweite Zahl und das Ergebnis auch nicht.
-
Zeig mal den Code, der diesen Fehler verursacht.
-
SeppJ schrieb:
Zeig mal den Code, der diesen Fehler verursacht.
Der steht doch oben, oder was ist gemeint?
-
Schreib mal statt
clear(); scanf("%c",&op);
scanf(" %c",&op); // mit Leerzeichen vor dem %
-
Huppala, hatte DarkShadow nicht gelesen.
Was ist mit Input-Buffer gemeint? Noch nie von gehört.
Komisch, mit dem Leerzeichen geht zumindest die Operation schon einmal.
Die erste Zahl und das Ergebnis werden ausgegeben, die zweite Zahl und der Operator werden nach wie vor nicht ausgeben.
-
Die zweite Zahl und der Operator sind immernoch vertauscht.. Ich hab es extra korrigiert
-
DarkShadow44 schrieb:
Die zweite Zahl und der Operator sind immernoch vertauscht.. Ich hab es extra korrigiert
Vielen Dank!
Ich hab das Detail nicht gesehen.Nun irritiert mich nur, warum ich die Referenz-Zeichen weglassen muss damit ich eine Ausgabe erhalte?
Ich dachte ich muss immer die Referenz nutzen, wenn ich bei printf Variablen ausgeben will?
-
Nein, printf ist nicht scanf. Es ist auch nicht das Gegenteil von scanf.
Und Referenzen gibt es in C überhaupt gar nicht, du denkst an C++. Das (unäre) & ist in C der Adressoperator.
-
Noch ne Kleinigkeit
Krachi schrieb:
float rechner(float zahl1,float zahl2,char op){ int ergebnis = 0;
ergebnis sollte ebenfalls vom Typ float sein, sonst bekommst du nur glatte Zahlen zurück.