Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 50<br />
5.2 Standardstreams, Fehlerbehandlung<br />
– siehe auch (Cpp/Kap. 3) –<br />
(5.20) Übb Dieses Unterkapitel führt genauer in die Welt der Streams ( ” Ströme“) ein. Daher<br />
wird es in der Vorlesung ausführlich erläutert. Eine genaue Kenntnis der hier abgehandelten<br />
Punkte ist für die Programmierung unerlässlich. Sie lernen die genaueren Eigenschaften<br />
der Ausgabe- und Eingabestromobjekte kennen (5.21, 5.22), danach den Zugriff über Elementfunktionen<br />
und Manipulatoren (5.23), wobei dadurch auch eine bequeme Formatierung der<br />
Ausgabe erfolgen kann.<br />
Es ist sehr wichtig, die zwei verschiedenen Arten des Einlesens zu unterscheiden: das Einlesen<br />
mit Hilfe des Eingabeoperators (>>), wo zunächst führende Zwischenraumzeichen überlesen<br />
werden (5.21 Kasten), und das Einlesen jedes einzelnen Zeichens mit der get-Funktion und<br />
verwandten Funktionen (5.24).<br />
Der Punkt (5.25) bietet eine Einführung in die Fehlerbehandlung durch Stromobjekte; ohne<br />
diese Kenntnisse ist es Sie kaum möglich, gut laufende Programme zu schreiben; denn<br />
fehlerhafte Eingaben durch Benutzer sind immer möglich. Da ein Stromobjekt im Fehlerfall<br />
(fast) nichts mehr tut, muss man wissen, dass (und wie) dieser Zustand behandelt werden<br />
muss.<br />
In (5.26) sehen Sie Beispielprogramme (im Internet jeweils als vollständige Programm erhältlich);<br />
es ist sehr wichtig, die Wirkung dieser Programm zu verstehen.<br />
(5.21) Variablenname für die Standardeingabeeinheit: cin (character in)<br />
Standardeingabe: meist Tastatur, kann auf der Betriebssystemebene umgeleitet werden, s.<br />
(1.35).<br />
” Dateiende-Zeichen“ bei Eingabe von Tastatur unter DOS/Windows: Strg-Z (Ctrl-Z, ASCII dez.<br />
26), unter Unix je nach Systemeinstellung ebenfalls Strg-Z oder anders, unter Linux standardmäßig<br />
Strg-D.<br />
Anweisung zum Einlesen: cin [- >> Variable ]- 1..n ;<br />
Anm1 Genauer eigentlich [- . . . ]- 0..n, jedoch nullmal wenig sinnvoll.<br />
Anm2 Haupteffekt des obigen Ausdrucks: s. (5.25c) (Streamobjekt als Referenz).<br />
Anm3 Die Eingabe über cin wird i. a. durch das BS (Betriebssystem) gepuffert:<br />
Anforderung C ++ an BS bzw. dessen Tastaturpuffer: zeichenweise,<br />
Einlesen vom Benutzer durch BS in BS-Tastaturpuffer: zeilenweise.<br />
Bei dieser gepufferten Eingabe über cin gibt der Ausdruck<br />
cin.rdbuf()->in avail()<br />
die Anzahl der im Augenblick im Puffer befindlichen Zeichen an (einschließlich ggf. Zeilenendezeichen).<br />
Bsp s. (5.26e).<br />
Anm4 Zum Einlesen bei C (C++) s. folgende Bibliotheksfunktionsfamilien aus :<br />
scanf, gets, getchar.<br />
Grundsätzlich sind zwei verschiedene Arten des Einlesens über cin zu unterscheiden:<br />
• Lesen mithilfe des Eingabeoperators ” >>“ – so wie oben angegeben:<br />
◦ Zunächst Überlesen aller möglicherweise vorhandenen Zwischenraumzeichen;<br />
als Zwischenraumzeichen (oder Trennungszeichen) 〈white spaces〉 gelten hier<br />
<strong>Leer</strong>zeichen, horizontTab, CR ( ” Wagenrücklauf“), LF (NeueZeile), NeueSeite,<br />
vertikTab.<br />
◦ Beginn des eigentlichen Lesens, d. h. der Übernahme/Umwandlung von Zeichen<br />
in die zugehörige Variable: mit dem ersten Nicht-Zwischenraumzeichen.<br />
◦ Ende des Einlesens: beim ersten zum Variablentyp nicht passenden Zeichen<br />
(beim Typ String ist es ein Zwischenraumzeichen);<br />
wichtig: dieses unpassende Zeichen bleibt im Lesepuffer, ist also beim nächsten<br />
Lesevorgang das als erstes zu lesende Zeichen.<br />
• Benutzung von Elementfunktionen, s. (5.24), (5.23b): keine Sonderbehandlung<br />
von Zwischenraumzeichen, jedes Zeichen gilt als ein zu lesendes Zeichen.