c Anfänger kommt nicht weiter; Probleme mit swich, scanf, while....
-
Hallo!
Ich versuche gerade einen kleinen Taschenrechner zu basteln. Er sollte + - * und / können, mit c soll man immer zum Anfang kommen bzw. das alte Ergebnis löschen. Mit q soll das Programm beendet werden. Man sollte mit double Zahlen rechnen können
Ich dachte mir folgenden Lösungsweg:
Einen Speicher der das Ergebnis enthält, zwspeicher für als Zwischenspeicher
Sooo ungefähr hätte ich mir gedacht dass es funktionieren könnteAber leider funktioniert nicht dies nicht. Schnappt mir das "c = (char)toupper(getchar())" die ganzen Zeichen weg?
#include <stdio.h> #include <ctype.h> #define FALSE 0 #define TRUE !FALSE void main () { int fertig; //Schleifenende char b, c; double ergebnis; //Ergebnis, wird durch die Operationen verändert int zwergebnis; //Zwischenspeicher der für den zweiten Operand benutzt wird ergebnis = 0; printf("Derzeitgiger Stand von ergebnis %d:\n", ergebnis); printf("Bitte Werte eingeben: "); scanf("%d", &ergebnis); printf("Derzeitgiger Stand von ergebnis %d:\n", ergebnis); fertig = FALSE; while (!fertig) { c = (char)toupper(getchar()); \\aus einem Buch genommen switch (c) { case '+': scanf("%d", &zwergebnis); ergebnis = ergebnis + zwergebnis; break; case 'Q': return (0); break; case '=': printf("Ergebnis ist %d", &ergebnis); break; default: printf("eingebene Zahl %d", &ergebnis); break; fertig = TRUE; //Schleifenende } //Ende von while } return (0); }
Ich probiere jetzt schon 3h rundum und bin am verzweifeln.
vg Christoph
-
anstatt scanf("%d", &ergebnis); scanf("%f", &ergebnis);
-
Warum funktioniert dieses Programm nicht so wie ich es will?
Wahrscheinlich hat es irgendwas mit double, float int usw. zu tun?#include <stdio.h> #include <ctype.h> #define FALSE 0 #define TRUE !FALSE void main () { int fertig; //Schleifenende int fertig2; //+ - schleife char c; double ergebnis; //Ergebnis, wird durch die Operationen verändert double zwergebnis; //Zwischenspeicher der für den zweiten Operand benutzt wird ergebnis = 0; zwergebnis = 0; fertig = FALSE; while (!fertig) { c = (char)toupper(getchar()); switch (c) { case '+': //Addieren scanf("%f", &zwergebnis); ergebnis += zwergebnis; break; case '-': //Subtrahieren scanf("%f", &zwergebnis); ergebnis -= zwergebnis; break; case '=': printf("Ergebnis ist %f\n", ergebnis); break; case 'Q': //Programm beenden return (0); break; case'c': //clear ergebnis ergebnis = 0; break; default: scanf("%f", &ergebnis); break; fertig = TRUE; //Schleifenende } //Ende switch } //Ende von while return (0); }
Danke schon im voraus! Bald habe ich wirklich keine nerven... Aber so ists wahrscheinlich bei jedem Anfänger
-
anstatt scanf("%f", &ergebnis); scanf("%lf", &ergebnis);
-
Dein "fertig = TRUE;" wird niemals ausgeführt werden... das weißt Du?
...und dann:
#define FALSE 0 #define TRUE !FALSE
Was ist das?
-
na !0 also true
-
...und sowas muß man wirklich von Hand definieren?
...mußte ich irgendwie noch nie...
-
Dann wahrscheinlich, weil du entweder nicht mit booleschen Werten arbeitest, oder weil du immer windows.h oder eine andere Library benutzt, die BOOL/TRUE/FALSE hat, oder weil du in C99 immer stdbool.h einbindest, oder weil du mit C++ arbeitest.
Auch wenn du's dir nicht vorstellen kannst, aber in reinem C gibt es sowas nicht, und manche bevorzugen es, nicht mit 0 und 1 zu arbeiten, sondern lieber mit benannten Konstanten.
-
Sooo geschafft!!! Alles funktioniert, bis auf die erste Rechnung. Warum liefert die erste Rechnung immer ein falsches Ergebnis? Jede weitere Rechnung liefert immer ein richtiges Ergebnis.
#include <stdio.h> #include <ctype.h> #define FALSE 0 #define TRUE !FALSE void main () { int fertig; //Schleifenende char c; double ergebnis; //Ergebnis, wird durch die Operationen verändert double zwergebnis; //Zwischenspeicher der für den zweiten Operand benutzt wird ergebnis = 0; zwergebnis = FALSE; printf("***************************\nq zum beenden\nc um Speicher zu löschen\nmögliche Operatoren:\n+ - */\n"); printf("***************************\nEingabe nach diesem Muster:\nx+y=\n***************************\n"); fertig = FALSE; while (!fertig) { c = (char)toupper(getchar()); switch (c) { case '+': //Addieren scanf("%lf", &zwergebnis); ergebnis += zwergebnis; break; case '-': //Subtrahieren scanf("%lf", &zwergebnis); ergebnis -= zwergebnis; break; case '*': //Subtrahieren scanf("%lf", &zwergebnis); ergebnis *= zwergebnis; break; case '/': //Subtrahieren scanf("%lf", &zwergebnis); ergebnis /= zwergebnis; break; case '=': //Ergebnis ausgeben printf("ergebnis \t%.3lf\n", ergebnis); break; case 'F': //zwergebnis ausgeben printf("zwergebnis \t%.3lf\n", zwergebnis); break; case 'Q': //Programm beenden case 'X': return (0); break; case'C': //clear ergebnis ergebnis = FALSE; zwergebnis = FALSE; break; default: scanf("%lf", &ergebnis); break; fertig = TRUE; //Schleifenende } //Ende switch } //Ende von while return (0); }