C++ zeichen einlesen ohne enter
gibt es eine funktion in c++ mit der man mehrere zeichen einlesen kann ohne dass man danach enter drücken muss?
Ich würde für einen taschenrechner nämlich gerne direkt 55+7 eingeben können und nicht 55 Enter +7Enter
5 Antworten
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Du kannst
template basicistream<CharType, Traits>& getline( basicistream<CharType, Traits>& Istr, basicstring<CharType, Traits, Allocator>& _Str );
nehmen. Die Funktion steht in . Als _Istr kannst du std::cin nehmen. Die Funktion liest dann eine Zeichenkette von std::cin bis Enter gedrückt wird. Danach kannst Du den in _Str übergebenen std::string parsen, d.h. auswerten. Viel Spaß!
![](https://images.gutefrage.net/media/user/chaostheorie314/1444747484_nmmslarge.jpg?v=1444747484000)
Das ist kompliziert, soweit ich weiß. Habe ich selber schonmal versucht. Du musst die einzelnen Zahlen einlesen (in Integer-Arrays) und von Zeichen unterscheiden, du musst die Zeichen richtig anordnen und viele fehlerhafte Eingaben des Benutzers korrigieren oder eine Meldung rausgeben, dass etwas nicht stimmt. Aber vielleicht gibt es eine Bibliothek dafür, such bei Google mal nach "equation solve library c++" oder ähnliches.
![](https://images.gutefrage.net/media/user/Grile/1444746174_nmmslarge.jpg?v=1444746174000)
Du kannst das ganze als String einlesen und den dann nach dem Rechenzeichen durchparsen. Danach Trennen und ein Typecast nach Integer zu den Zeichen vor und nach dem Rechenzeichen.
Ich hab jetzt "nur" C und Java-Kenntnisse.. aber in C++ müsste es genauso gehen ;) Kann dir nur mit den genauen Befehlen grad nicht weiterhelfen.
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Und ein zuverlässiger (!) Parser ist auch keine ganz triviale Aufgabe.
![](https://images.gutefrage.net/media/user/Ysengrin/1444747787_nmmslarge.jpg?v=1444747787000)
Dafür gibt es in der Library "conio.h" den Befehl getch(). Guck dir den mal an.
![](https://images.gutefrage.net/media/user/Ysengrin/1444747787_nmmslarge.jpg?v=1444747787000)
Dann benutz cgets() (http://en.wikipedia.org/wiki/Conio.h). Aber getch wär schon mal nicht grundlegend schlecht für das was du machen möchtest, da du dann einzeln nach Operatoren prüfen kannst...
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Das ist aber nicht wirklich "C++", sondern ein uralter DOS-Header ;) Davon sollte man eher die Finger lassen.
![](https://images.gutefrage.net/media/user/Ysengrin/1444747787_nmmslarge.jpg?v=1444747787000)
Du darfst den Ausgabewert ja auch nicht in einer Integer-Variable ablegen. Du solltest jeden einzelnen Char in einen String befördern, diesen dann mit "atoi" (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/) in Integer umwandeln und nach dem Operatoren einen neuen String beginnen.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Du kannst das schon als kompletten String einlesen (cin kennst du hoffentlich), aber dann hast du ein noch größeres Problem, weil du dann irgendwie den String nachträglich in seine Einzelteile zerlegen musst. Sowas ist grundsätzlich schon nicht einfach, mit den Mitteln der C++-Standardbibliothek erst recht ;)
Mal aus Interesse: wie und warum lernst du C++?
![](https://images.gutefrage.net/media/user/Gianotti/1444744486_nmmslarge.jpg?v=1444744486000)
naaaja. so schwer ist das auch nicht. die funktion zieht sich dann halt ein wenig fürs berechnen aber dafür kann sie dann immer benutzt werden egal wie lang die rechnung ist.
getch() ließt nur ein zeichen ein