[C++]Eingabe abfangen(zeichen in int verhindern)

Sepsis

Cadet 2nd Year
Registriert
Apr. 2007
Beiträge
25
Tach,

Folgendes:
Code:
while(1){

int x;
cin >> x;

//...weiteres Programm...

}

Wenn man hier ein Zeichen eingibt dreht das ganze Programm durch. Wie kann ich das verhindern?

Ich hab schon cin.fail() ausprobiert aber das hat irgend wie nichts geändert.
 
Das funktioniert schon soweit. Du solltest bedenken, dass e ein gültiges Zeichen im Sinne der wissenschaftlichen Notation ist. Wenn einmal das failbit von cin gesetzt ist, musst du erst cin.clear() aufrufen um das Failbit wieder zulöschen. Ansonsten ist jede Operation (also auch formatierter Input mit >>) ein No-Op.
 
Achso oke danke


Also würde das dann so funktionieren? :

Code:
while(1){

int x;
cin >> x;

if(cin.fail()){
cin.clear();
continue;
}

}
}


Also ich habs ausprobiert aber es ändert gar nichts:freak:.
 
Zuletzt bearbeitet:
Steck mal noch ein "while((cin.get() != '\n'));" in die if-Anweisung hinter das "cin.clear();", um alle unpassenden Zeichen aus dem Tastaturpuffer zu entfernen. Das "continue;" ist übrigens überflüssig.
 
Zuletzt bearbeitet:
das continue ist in DIESEM fall überflüssig das stimmt schon...

das mit dem eingabe puffer wusste ich nicht.

oke gut danke es funktioniert jetzt einwand frei.
 
Stimmt, der Puffer, daran hatte ich nicht gedacht. Wenn beim Einlesen ungültige Zeichen gefunden werden, wird das Lesen abgebrochen und die Zeichen bleiben im Streambuffer stehen. Die werden beim nächsten Leseversuch natürlich wieder gelesen und es schlägt wieder fehl.

Btw, um kleinkariert zu sein :D , cin.get() != '\n' alleine kann eine Endlosschleife sein, wenn z.B. EOF auftritt. Besser und einfacher ist es, hier mit cin.ignore zu arbeiten.
 
Zurück
Oben