C: Wie kann ich einen Taschenrechner programmieren, bei dem eine Tastatureingabe die Rechenoperation bestimmt?

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.

Thena03 
Fragesteller
 07.11.2021, 19:30

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

0
ralphdieter  07.11.2021, 21:04
@Thena03
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"
0
Thena03 
Fragesteller
 07.11.2021, 21:23
@ralphdieter

wirklich vielen herzlichen dank für die Hilfe. echt korrekt

0

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


Thena03 
Fragesteller
 07.11.2021, 05:54

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

0
ToniKim  07.11.2021, 06:01
@Thena03

Ich habe es nicht mehr im Kopf muss du selber nachlesen

0