Wie verhindert man, daß cin Buchstaben akzeptiert, wenn eine Zahl erwartet wird?
-
Folgender Code:
#include <iostream> int main() { int i; std::cin >> i; std::cout << i << std::endl; return 0; }Wenn man nun das Programm compiliert und startet,
dann gibt er bei der Eingabe einer Zahl zwar eine Zahl wieder aus und beendet das Programm, aber wenn man anstatt einer Zahl oder Ziffer ein paar Buchstaben eingibt, dann akzeptiert cin das Return und gibt für i eine 0 aus und beendet anschließend das Programm.Wie bestimmt man nun, daß nur Ziffern eingegeben werden können und erst dann das Programm beendet wird?
Dabei sollte es auch möglich sein, auch wieder nur eine 0 einzugeben, so daß das Programm auch dann beendet werden kann, wenn i immer noch = 0 ist.
-
Gar nicht, oftmals erhalten Programme ihren Input ja gar nicht durch User-Eingabe sondern bspw. aus Files oder aus dem Output anderer Programme:
$ ls | grep testNun kann man in grep nicht verhindern, dass beliebiger Input von ls durchgereicht wird. Dementsprechend funktioniert das mit Standardmitteln so auch nicht.
a) Du kannst solange einlesen und im Fehlerfall wiederholen bis die richtigen Daten da sind.
b) Du nutzt Betriebssystemmittel - welches OS nutzt du?
MfG SideWinder
-
Windows und Linux.
Also müßte ich für so etwas wieder C Mittel wie get(i) benutzen.
-
Frage min cin schrieb:
Windows und Linux.
Also müßte ich für so etwas wieder C Mittel wie get(i) benutzen.
Nein, das geht überhaupt gar nicht mit Standardmitteln, auch nicht mit denen von C. Und plattformunabhängig schon gar nicht, du musst eigenen Code für Linux und Windows schreiben.
Aber: Wie wäre es einfach mit ein bisschen Fehlerprüfung?
int main() { int i; while (!std::cin >> i) { std::cout << "Das war keine Zahl, versuch's noch einmal!\n"; std::cin.clear(); std::cin.ignore(1); } std::cout << i << std::endl; return 0; }edit: Ach, das hat mein Vorantworter auch schon gesagt.
-
Was ist mit kbhit() aus alten C-Zeiten?
Welche Anwendungen programmierst du Konsole oder Windows?
-
berniebutt schrieb:
Was ist mit kbhit() aus alten C-Zeiten?
Das ist kein C, sondern conio.h
-
SeppJ schrieb:
berniebutt schrieb:
Was ist mit kbhit() aus alten C-Zeiten?
Das ist kein C, sondern conio.h
und bräuchte noch _getch() ...