Taschenrechner in C
-
Hallo,
ich wollte einen Taschenrechner programmieren wo man einen kompletten string angeben kann und dieser dann ausgrechnet wird.
#include <stdio.h> #include <string.h> main() { double a = 0.00, b = 0.00; char string1[20], string2[20], eingabe[20], operator; int i=0, j=0, u=0; printf_s("---Taschenrechner---\n"); printf_s("\nGeben Sie einen Term an: "); gets(eingabe); while (eingabe[i] != '+' && eingabe[i] != '-' && eingabe[i] != '*' && eingabe[i] != '/') { string1[u] = eingabe[i]; i++; u++; } operator=eingabe[i]; while (eingabe[i] > 0) { if (eingabe[i] != '+'){ string2[j] = eingabe[i]; i++; j++; } else{ i++; } } string1[u] = '\0'; string2[j] = '\0'; a = atof(string1); b = atof(string2); switch (operator) { case '+': printf_s("\nDas Ergebniss lautet: %.2f\n", a + b); break; case '-': printf_s("\nDas Ergebniss lautet: %.2f\n", a - b); break; case '*': printf_s("\nDas Ergebniss lautet: %.2f\n", a * b); break; case '/': printf_s("\nDas Ergebniss lautet: %.2f\n", a / b); break; default : printf_s("\nFehler\n"); break; } system("PAUSE"); return(0); }
Das Problem ist aber, dass a und b nicht die gewünschten Werte erhalten sondern immer noch gleich 0 sind.
Ich bedanke mich schon im Voraus für die Hilfe.
-
Dann laß dir doch mal string1 und string2 sowie a und b ausgeben.
PS: gets solltest du ganz schnell aus deinem Programm verbannen (Stichwort: buffer overflow)! Nutze stattdessen entweder fgets oder aber scanf.
-
string1 und string2 besitzen beide die richtigen Werte. a und b bleiben aber 0.
-
Schuss ins Blaue: Du hast so etwas wie "1,2 + 4,5" eingegeben.
Die Zeilen 15-42 kannst du praktisch komplett und besser durch ein einfaches
scanf("%lf %c %lf", &a, &operator, &b);
ersetzen.
-
Die Zeilen 15-42 kannst du praktisch komplett und besser durch ein einfaches
scanf("%lf %c %lf", &a, &operator, &b);
ersetzen.[/quote]
Wenn ich die Zeile einsetzte bekomme ich nachdem ich den string eingegeben habe die Nachricht "Taschenrechner.exe hat einen Haltepunkt ausgelöst." und es verweist mich in stdio.h zur Zeile "return __stdio_common_vfscanf(".
-
Zeig doch mal bitte den Code (Copy&Paste) und deine Eingabe, die zum besagten Ergebnis führt (ebenfalls Copy&Paste).
-
Und schreib uns, welche Eingabenstring du benutzt (so wie SeppJ schon geschrieben hat, darfst du bei Zahlen kein Komma sondern mußt das US-englische Äquivalent '.' angeben - außerdem dürfen bei atof auch keine Leerzeichen da drin enthalten sein).
Ein Taschenrechner wird zwar häufig als Einstiegsbeispiel genommen, aber gerade bei der Auswertung der Eingabe hat C so seine Tücken - die man erstemal lernen muß ;-).
-
Th69 schrieb:
Ein Taschenrechner wird zwar häufig als Einstiegsbeispiel genommen, aber gerade bei der Auswertung der Eingabe hat C so seine Tücken - die man erstemal lernen muß ;-).
Der von mir gezeigt scanf sollte eigentlich narrensicher sein, deshalb bin ich gerade schwer verwirrt, was David B da falsch gemacht haben könnte. Meinen Formatstring würde ich auch nicht gerade tückisch nennen.
Wenn man es natürlich so versucht, wie David B es zuerst selber versucht hat, das ist außerordentlich tückisch.
-
SeppJ schrieb:
Zeig doch mal bitte den Code (Copy&Paste) und deine Eingabe, die zum besagten Ergebnis führt (ebenfalls Copy&Paste).
Hier ist nochmal der neue Code:
#include <stdio.h> #include <string.h> main() { double a = 0.00, b = 0.00; char string1[20], string2[20], eingabe[20], operator; int i=0, j=0, u=0; printf_s("---Taschenrechner---\n"); printf_s("\nGeben Sie einen Term an: "); scanf_s("%lf %c %lf", &a, &operator, &b); switch (operator) { case '+': printf_s("\nDas Ergebniss lautet: %.2f\n", a + b); break; case '-': printf_s("\nDas Ergebniss lautet: %.2f\n", a - b); break; case '*': printf_s("\nDas Ergebniss lautet: %.2f\n", a * b); break; case '/': printf_s("\nDas Ergebniss lautet: %.2f\n", a / b); break; default : printf_s("\nFehler\n"); break; } system("PAUSE"); return(0); }
Als string habe ich "12+13" benutzt.
-
Das kommt davon, wenn man das unsägliche scanf_s statt des vernünftigen scanf benutzt.