Integereingabe und Return bzw. Leereingabe
-
Hi.
Strings kann man ja mit getline() einlesen damit Leerzeichen nicht übersprungen werden. Leider finde ich nicht heraus wie man das mit Zahlen machen kann.
while((std::cout << "Zahl zwischen 10 und 2500 eingeben: ") && (!(std::cin >> zahl) || zahl < 10 || zahl > 2500)) { std::cout << " Falscher Wert"; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // FooBar }Bei einer Zahl die nicht zwischen 10 und 2500 liegt kann ich die Falsch Eingabe abfangen. Gebe ich aber nichts ein, also nur Return oder meinetwegen ein Leerzeichen und dann Return, dann reagiert die Eingabe nicht (Cursor macht einen Zeilensprung).
Auf "" oder "\n" zu prüfen ist nicht erlaubt da der Datentyp ein Integer ist.Gibt es eine Möglichkeit so etwas abzufangen. Ist ein einfaches Konsolenprogramm.
Compiler: GCC
System: LinuxSollte aber wenn möglich Standard sein und somit Plattformunabhängig.
Danke.
-
GetInt schrieb:
Gebe ich aber nichts ein, also nur Return oder meinetwegen ein Leerzeichen und dann Return, dann reagiert die Eingabe nicht (Cursor macht einen Zeilensprung).
Leerzeichen und Return sind sogenannte Whitespace Zeichen. Diese werden normalerweise bei der Eingabe eines Integers oder eines Strings (Wort) übersprungen.
Dies lässt sich normalerweise mit noskipws abschalten. Ob das bei der Konsoleneingabe (cin) funktioniert muss man ausprobieren. Es kann sein, dass eine leere Eingabe (nur Return) als keine Eingabe zählt.
Gruß
Werner
-
Wow, vielen Dank!
Das kannte ich nicht. Ist sogar in <iostream> vorhanden und funktioniert genau so wie ich es will.while((std::cout << "Zahl zwischen 10 und 2500 eingeben: ") && (!(std::cin >> std::noskipws >> zahl) || zahl < 10 || zahl > 2500)) { std::cout << " Falscher Wert"; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // FooBar }Gruß.
-