C: Wie kann ich einen Taschenrechner programmieren, bei dem eine Tastatureingabe die Rechenoperation bestimmt?
Ich möchte gerne einen Taschenrechner programmieren, bei dem man zwei Zahlen eingibt und dann mit Tastatureingabe (zum Beispiel A für Addition) auswählen kann, was mit den zwei Zahlen passiert.
Die Frage ist: Wie programmier ich so etwas? Vor allem das mit der Tastatureingabe?
Ich bin bis jetzt so weit:
#include<stdio.h>
int main()
{
int zahl1;
int zahl2;
char rechenart[2];
printf("Bitte geben Sie eine Zahl ein ");
scanf_s("%d", &zahl1);
printf("Bitte geben Sie eine Zahl ein ");
scanf_s("%d", &zahl2);
printf("Bitte w\x84hlen sie eine Rechenart aus\n ");
printf("'A' f\x81r Addition\n");
printf("'S' f\x81r Subtraktion\n");
printf("'M' f\x81r Multiplikation\n");
printf("'D' f\x81r Division\n");
scanf_s("%s", &rechenart, 2);
if (rechenart == "A") {
printf("Addition");
}
else if (rechenart == "b") {
printf("Subtraktion");
}
return 0;
}
3 Antworten
Die Eingabe ist ja offenbar fertig. Jetzt muss Du sie nur noch verarbeiten. Im Prinzip geht es so weiter:
printf("Addition: %d+%d=%d\n", zahl1, zahl2, zahl1+zahl2);
Allerdings funktioniert dein Vergleich rechenart=="A" so nicht, weil er nur die Zeiger vergleicht. Den Inhalt zweier Zeichenketten vergleicht man mit strcmp():
if (strcmp(rechenart, "A")==0)
Aber speziell hier weißt Du schon, dass die Zeichenketten höchstens ein Zeichen enthalten. Deshalb reicht es, nur das erste Zeichen zu prüfen:
if (rechenart[0]=='A')
(Beachte die einfachen Anführungszeichen).
Weitere Tipps:
- Verwende double statt int. Dann klappt's auch mit Kommazahlen.
- Verwende ein switch-case statt einer if-else-Kette.
- Lasse als Rechenart mehrere Varianten zu (z.B. 'A' oder 'a' oder '+' für die Addition).
- Prüfe den Rückgabewert von scanf() und fange falsche Eingaben ab.
if (strcmp(rechenart, "A")==0), warum steht da ==0
strcmp(s,t) gibt 0 zurück, wenn die Strings gleich sind. Eine Zahl größer 0 sagt, dass s>t, und eine Zahl kleiner 0 bekommst Du, wenn s<t. Das ist etwas gewöhnungsbedürftig, aber ganz praktisch.
dass auch, wenn man a klein schreibt, es addiert wird
- beides prüfen und mit || (logisches oder) verbinden:
if (strcmp(rechenart, "A")==0 || strcmp(rechenart, "a")==0)
- die Nicht-Standard-Funktion stricmp() verwenden (i steht für ignore case)
if (stricmp(rechenart, "A")==0)
- wenn Du nur das erste Zeichen vergleichst, kannst Du die Eingabe in einen Kleinbuchstaben umwandeln:
if (tolower(rechenart[0])=="a") // passt auch bei "A"
wirklich vielen herzlichen dank für die Hilfe. echt korrekt
Wenn du sowieso für deine Rechenart nur einen char brauchst, brauchst du auch keine 2 Elemente.
Nach wie vor liest du einfach das erste Element des Arrays aus.
Benutze hier einen switch case, diese else if Verzweigungen sind hier unübersichtlich.
Machst du zahlen auf vom Typ Double
Wegen Division, sicherst auch ab, dass als Teiler keine 0 darf.
Die Ausgabe machst du auch mit printf
ja aber wie mache ich das mit der tastatureingabe, also wenn ich a eingebe sollen beide eingegebenen zahlen miteinander addiert werden, wenn ich s drücke sollen die beiden zahlen miteinander subtrahiert werden. wie kann ich dass programmieren
if (strcmp(rechenart, "A")==0), warum steht da ==0. Also warum wird der vergleich mit 0 durchgeführt.
und wie kann man in der zeile hinzufügen, dass auch, wenn man a klein schreibt, es addiert wird ich hab mit, "a" versucht, aber das geht. könntest du mir auch hier helfen