Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 54<br />
}<br />
/* 3 */ while (cin >> zahl, cin.fail()) {<br />
// Fehlerbehandlung nach (d)<br />
}<br />
/* 4 */ while (!(cin >> zahl)) {<br />
// Fehlerbehandlung nach (d)<br />
}<br />
(d) △! Im Fehlerfall (eines der drei Fehlerbits gesetzt) tut der Strom nichts mehr, was man<br />
auch immer ihm befiehlt; daher unbedingt (im Falle eines reparablen Zustands) das Löschen<br />
des/der Fehlerbit(s) nicht vergessen! Dies geschieht durch Aufruf der Elementfunktion<br />
clear(), vgl. (5.26d).<br />
△! Zusätzlich muss i. a. die Fehlerursache beseitigt werden, da sonst bei Wiederholung<br />
der Operation wieder der gleiche Fehler erzeugt wird. Beim Einlesen z. B. bleibt das fehlerverursachende<br />
Zeichen im Strom! Es muss demnach mindestens ein Zeichen verworfen<br />
werden, beispielsweise durch ignore (5.23b). Meist ist es sinnvoll, die ganze Eingabezeile zu<br />
verwerfen, vgl. (5.26d).<br />
↑↑ Weitere Informationen zur Fehlerfindung und -behandlung bei Streams s. (Cpp/Kap. 4).<br />
(e) Die Elementfunktion zum Testen auf Dateiende-Bedingung (d. h. ob eofbit gesetzt ist) ist<br />
die eof-Funktion:<br />
StreamobjektName.eof()<br />
Sie gibt true zurück, wenn eofbit gesetzt ist (d. h. nach einem Leseversuch hinter das<br />
Dateiende), sonst false. Diese Funktion ist wichtig, wenn man mit Dateien umgeht (s.<br />
nächstes Unterkapitel), insbesondere wenn man einen allgemeinen Fehler von dem speziellen<br />
Dateieende-Fehler unterscheiden möchte.<br />
(f) Wenn das Einlesen auf eine Variable fehlschlägt, sollte ihr bisheriger Wert unverändert<br />
bleiben. Dies ist nach (Str3/Kap. 21.3.3) auch bei den vordefinierten Stromobjekten der Fall.<br />
Leider hält sich der Compiler Microsoft Visual C ++ 6.0 nicht an diese Regel, er setzt im<br />
Fehlerfall die Variable auf den Wert Null.<br />
(5.26) Bsp<br />
Bsp Bei folgendem Programmfragment sollte im Fehlerfalle die Zahl 35 ausgegeben werden; bei Kompilation<br />
mit MS VC++ 6.0 wird jedoch der Wert 0 ausgegeben.<br />
int zahl=35;<br />
cout zahl)) {<br />
// Bei Einlesefehler:<br />
cout c) cout