Prüfen ob Eingabe eine Zahl ist.
-
Verzweifelter Neuling
schrieb:Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:
Das ist keine Lösung, bestenfalls ein Workaround. Besser sieht es so aus:
int length; cout << "Wie oft soll die Taste emuliert werden?" << endl; cin >> length; if(cin)//oder if(cin.good()) { cout << "\n"; } else { cout << "Ungueltige Eingabe" << endl; cin.clear();//Fehlerflags zurücksetzen cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen }
-
CStoll schrieb:
cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen }Sicher, nich eher:
std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
-
CStoll schrieb:
Verzweifelter Neuling
schrieb:Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:
Das ist keine Lösung, bestenfalls ein Workaround. Besser sieht es so aus:
int length; cout << "Wie oft soll die Taste emuliert werden?" << endl; cin >> length; if(cin)//oder if(cin.good()) { cout << "\n"; } else { cout << "Ungueltige Eingabe" << endl; cin.clear();//Fehlerflags zurücksetzen cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen }Ja, das ist eindutig besser und auch übersichtlicher. Vielen Dank!

-
David_pb schrieb:
CStoll schrieb:
cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen }Sicher, nich eher:
std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );Beides ist "öfters" möglich. Das ignore() tuts bei mir auch komischerweise ganz gut

Dennoch bevorzuge ich das:
string temp = ""; getline(cin,temp);
-
Hm... ignore() ignoriert ja standardmäßig nur ein Zeichen. Bei mir (gcc) gings nicht, habs nochmal ausprobiert!

-
David_pb schrieb:
ich eher:
std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );Da erhalte ich einmal den Fehler, dass es kein Element von std ist (obwohl es in der Autovervollständigung als solches angezeigt wird) und einmal, dass es ein nicht deklarierter Bezeichner ist!?

Muss ich da noch eine Header Datei includieren?
-
#include <limits> #include <iostream>
-
Ja:
#include <limits>Edit: Zu spät

-
Der echte Fehler ist der signed Typ wenn nur positive Zahlen gewollt sind.
Nimm unsigned (int) oder std::size_t.
-
David_pb schrieb:
Hm... ignore() ignoriert ja standardmäßig nur ein Zeichen. Bei mir (gcc) gings nicht, habs nochmal ausprobiert!

Ja, die ganze Geschichte mit ignore() etc ist für mich seltsam, nicht alles tut was es tun soll. Habe auch diesbezüglich schon Änderung des FAQ-Eintrags "Automatisches Schließen verhindern" gewünscht
: http://c-plusplus.net/forum/viewtopic-var-t-is-183666.html