Taschenrechner - Aufgabe nur in einer Zeile eintippen
-
Ich wollte heute nun den Versuch starten einen Taschenrechner so zu programmieren, dass er die Aufgabe wenn sie in einer Zeile eingetippt wird, berechnen kann, also nciht das erst so ist:
Operand eingeben: *
Zahl eingeben: 3
zweite Zahl: 4
Ergebnis: 12sondern lediglich:
Aufgabenstellung:
3*4
Ergebnis: 12Ok... Ich hatte die Idee es mit einem char-Array zu versuchen. Die Aufgabe wird in einem Array eingelesen und dann wird der Wert des ersten Elementes in eine Integervariable umgewandelt. Dann überprüfe ich den ASCII-Code: Insofern er zwischen 48 und 59 liegt, ist es logischerweise die Zahl. Aus Testzwecken habe ich, falls es eine Zahl ist "ja stimmt" oder "ne falsch" ausgeben lassen. Aber seltsamerweise, egal was ich eingebe, taucht immer "ne falsch" auf, egal was ich eingebe.
Hier der Code:
#include <iostream> #include <ctype.h> using namespace std; int main() { const int eingabeLength = 3; char eingabe [eingabeLength]; //int intEingabe [eingabeLength]; int ersteZahl; char operand; cout << "Aufgabe eingeben: " << endl; cin >> eingabe[eingabeLength]; static_cast <int> (eingabe[0]); if ((eingabe[0]>= 48)&&(eingabe[0]<=59)) { cout << "ja stimmt" << endl; return 0; } else { cout << "ne falsch" << endl; return 0; } }
-
eingabe[eingabeLength] das stimmt nicht.
Du erstellst da drüber ein Array mit 3 Elementen. Dann willst du an Stelle 3 was einlesen. Das Array endet aber mit Stelle 2 (0 bis 2). Mach cin >> eingabe[0] draus.
Den static_cast brauchst du auch nicht. Kannst auch direkt mit '0' und '9' vergleichen. Wichtig hierbei sind die einfachen Anführungszeichen, da diese für ein Zeichen stehen, während "0" und "9" wieder ganz was anderes sind.
-
Stimmt. Fällt mir auch grad auf, danke^^. Aber wie soll ich dann machen, dass alles eingelesen wird?
-
du denkst zu kompliziert

double op1, op2; cin op; cin >> op1 >> op >> op2; switch (op) { case '+': cout << op1 + op2 << endl; //... }du hast übrigens schon fast den richtigen header inkludiert, falls du bei deiner (umständlicheren) variante bleiben willst.
#include <ctype>ist, was du suchst, um die funktionisnumzu bekommen.
-
#include <string> ... string buffer; cin >> buffer;namespace nicht vergessen...
-
Danke es funktioniert...
Habe immer gedacht wenn man mit dem Befehl cin arbeitet weist er die Eingabe anhand von den leerzeichen zu. Danke nochmal an beide.
Thread kann gecloset werden.
-
Macht er eigentlich auch. Sonst getline anschauen.
-
Culfa schrieb:
Danke es funktioniert...
Habe immer gedacht wenn man mit dem Befehl cin arbeitet weist er die Eingabe anhand von den leerzeichen zu. Danke nochmal an beide.
Thread kann gecloset werden.
macht er - aber bei strings. wenn du die richtigen typen verwendest, liest es solange, bis es erkennt, dass ein zeichen nicht mehr dazugehört. deshalb auch double (bei int würde nach einem punkt (komma) gestoppt werden) und char (damit nur ein einzelnes zeichen eingelesen wird). white spaces werden übrigens standardmäßig bei jeder eingabe (über >> und außer man verwendet noskipws) übersprungen.
das einzige problem mit dem code ist, dass der benutzer bei der eingabe immer "richtig" eingeben muss (also z.b. nicht foo + 3 oder 3 +- 2)
-
Könnte man dann ja per Exceptionshandling machen.