07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!