char-Eingabe verhindern!! Wie??
-
Wenn du es nicht einmal am Bildschirm sehen willst hast du keine Chance mit dem Standard.
Siehe getch() in der Konsolen-FAQ.
Für float-Werte steht auch bereits etwas in der Konsolen-FAQ, das auf Integers umzubauen sollte kein so großes Problem sein, da es einfacher ist.MfG SideWinder
-
Es wäre kein Problem, wenn es am Bildschirm angezeigt wird! Wenn ich aber "enter" drücke, sollte eine Fehlermeldung erscheinen!! Ändert das was??
Ich schau mir mal die FAQ an...Gruß
kent2
-
Dann wäre wirklich das einzige was mir einfällt es mit getch() zu versuchen. Dazu die <conio.h> einbinden und die Tasten abfragen
-
Hallo,
Es wurde doch schon vorgeschlagen das Failbit zu prüfen
int zahl; cin>>zahl; if(cin.fail()) ErrorFunc();
-
Die Methode mit dem Failbit funktioniert auch nicht!!
MfG
kent2
-
kent2 schrieb:
Die Methode mit dem Failbit funktioniert auch nicht!!
MfG
kent2"Funktioniert nicht" ist zu wenig.
Welche Fehlermeldung bekommst du denn oder erkennst du es erst zur Laufzeit?
Dieses funktioniert nicht?:#include <iostream> int main() { int zahl; std::cin >> zahl; if(std::cin.fail()) std::cout << "Error" << std::endl; else std::cout << zahl << std::endl; }
-
Hmm,
also bei mir funktioniert diese Methode nachweislich.
Auch mittels Exceptions kann man das machen.
try{ int zahl; cin.exceptions(ios_base::failbit); cin>>zahl; }catch(...){ cout<<"Fehler keine Zahl"<<endl; exit(0); }
-
Hast du mein Programm genau übernommen?? Wenn ja, dann dürfte es nicht funktionieren!! Das Problem liegt an der do-while, wenn die nicht wäre, dann würde es funktionieren!
do { // // } while(anzahl<1);
Aber die Schleife brauche ich nunmal, da sich die Eingabe bei Falscheingabe wiederholen muss!!
kent2
-
Nope habs nicht genau übernommen, jetzt weiss ich auch welches komische Verhalten du meinst. Normalerweise sollte sich das mit cin.clear() beheben lassen. Ich habs probiert und es hat NICHT geklappt. Im moment bin ich etwas ratlos.
Man kann natürlich den umständlichen Weg gehen und in einen String einlesen, den umwandeln bzw. testen ob es sich um eine Zahl handelt und dann entsprechend reagieren. Aber wie gesagt, das ist umständlicher.
-
hier ein Vorschlag für den umständlichen Weg, welcher aber funktioniert:
#include<iostream> using namespace std; int main(){ char cControl = ' '; int digit; cin.get(cControl); while( !isdigit(cControl) ){ cout<<"validity error!"<<endl; cin.get(cControl); } cin.putback(cControl); cin>>digit; return 0; }