001
28.03.2003, 10:04 Uhr
~0xdeadbeef
Gast
|
Es gibt keinen Aufruf von cin. Es gibt genaugenommen einen Aufruf von cin.operator>>(int). cin ist eine Instanz der Klasse istream, also eine Variable. Der Puffer leert sich dabei nicht, weil das Prinzip eines Streams im Grunde das einer FIFO ist. Das Zeichen bleibt so lange im Puffer, bis es aktiv rausgeholt wird, und vorher kommst du auch an die anderen nicht ran. Das macht auch Sinn - für den Fall, dass du eine vernünftige Fehlerbehandlung planst, wäre es zum Beispiel extrem ungünstig, wenn du nicht mehr an die Daten, die den Fehler verursacht haben, herankommst. Dementsprechend musst du cin mitteilen, dass er seinen Puffer leeren soll, was du mit der Methode ignore(..) tun wirst. Beispiel:
C++: |
int ergebnis; do { cin.clear(); //stream-state flags zurücksetzen, damit cin.fail() nicht weiter true zurück gibt cin.ignore(); //im Puffer verbleibende Zeichen ignorieren (wegschmeissen) cin >> ergebnis; //einlesen } while(cin.fail()); //solange, bis das Einlesen des ints hingehauen hat
|
|