Prüfen ob Eingabe eine Zahl ist.
-
Nachtrag: Das Hauptproblem besteht darin, dass ich eingegebene Buchstaben nicht abfangen kann, weil ich einen int auf die Eingabe gelegt habe.
int length; cout << "Wie oft soll die Taste emuliert werden?" << endl; cin >> length; //Akzeptiert naürlich nur Ganzzahlwerte cout << "\n";
-
dann mach es doch so
int length; cout << "Wie oft soll die Taste emuliert werden?" << endl; cin >> length; //Akzeptiert naürlich nur Ganzzahlwerte if(!cin) { //tue etwas, also fehlerbehandlung bei einer nicht eingabe von einer zahl } cout<<endl;
-
Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:
int length; char buf[20]; cout << "Wie oft soll die Taste emuliert werden?" << endl; cin >> buf; if(sscanf(buf, "%d", &length)) { cout << "\n"; // Das steht da nur damit das Program einfach weiterarbeitet wie gewohnt } else { cout << "Ungueltige Eingabe" << endl; cout << "\n"; }
-
hallo,
alles klar wennde selber drauf gekommen bist

-
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