C++ Ein- und Ausgabe
Willemers Informatik-Ecke

Reden ist Silber, Schweigen ist Gold. Es wird Sie gewiss mit Freude erfüllen, dass der Computer so wunderbar rechnen kann. Aber selbst wenn Neugierde nicht zu Ihren Untugenden gehört, werden Sie irgendwann einmal wissen wollen, was der Computer denn herausgefunden hat. Eine Ausgabefunktion muss her!

An dieser Stelle wird die Ein- und Ausgabe auf dem Bildschirm so weit beschrieben, dass Sie sinnvolle Programme schreiben können. Ausführlichere Details zu dem Thema finden Sie an anderer Stelle.

Ausgabestrom nach cout

C++ verwendet für die Ein- und Ausgabe das Datenstrom-Modell. Der Datenstrom zur Ein- und Ausgabe wird in einer eigenen Bibliothek behandelt. Um sie zu verwenden, muss vor der ersten Verwendung die folgende Zeile eingegeben werden:

#include <iostream.h>

In einigen Listings werden Sie auch sehen, dass iostream ohne die Erweiterung .h verwendet wird. Wenn Sie einen halbwegs aktuellen Compiler verwenden, ist beides möglich. Der Unterschied hat mit der Verwendung von Namensräumen zu tun.

Um Daten anzuzeigen, werden sie auf die Datenausgabe cout (Das »out« in cout ist englisch und bedeutet »aus«. Es ist also das Ausgabeobjekt, auf das umgeleitet wird. Das »c« steht davor, weil es der Lieblingsbuchstabe von Bjarne Stroustrup ist. Darum hat er seine Sprache ja auch C++ genannt.) geleitet. Zunächst wird das Datenziel genannt. Dann werden zwei Kleiner-Zeichen verwendet, um die Richtung der Daten in Richtung der Ausgabe anzuzeigen.

[Ausgabe einer Variablen]

cout << MeinZahlenWert;
cout << endl;

Im Beispiel wird die Variable MeinZahlenWert ausgegeben. In der Zeile darunter wird endl auf den Datenstrom gesendet. Dies ist keine selbst definierte Variable, sondern eine vordefinierte Konstante für das Zeilenende. Die Verwendung von endl sorgt auch dafür, dass alle anzuzeigenden Daten sofort auf dem Bildschirm erscheinen.

Kaskadierung

Der Übersicht halber oder um sich Tipparbeit zu sparen, können mehrere Ausgabeobjekte direkt hintereinander, durch die doppelten Kleiner-Zeichen getrennt, aufgeführt werden.

[Ausgabekette]

cout << MeinZahlenWert << endl;

Begleittexte

Sie können nicht nur Variablen, sondern auch Konstanten auf diesem Weg ausgeben. Das ist besonders interessant bei Zeichenketten, mit denen Sie Ihren Programmausgaben ein paar erläuternde Texte beifügen können.

[Ausgabekette]

cout << "Ergebnis: " << MeinZahlenWert << endl;

Dieses gekonnte Beispiel trockener Informatiker-Poesie sagt dem Anwender, das der Wert, der jetzt auf dem Bildschirm erscheint, das Ergebnis des Programms ist. Solche Informationen sind es, die ein benutzerfreundliches Programm ausmachen.

Formatierte Ausgabe

Wenn Sie mehrere Zahlenwerte nacheinander an cout umleiten, so werden Sie feststellen, dass sie ohne Trennzeichen direkt nebeneinander dargestellt werden. Die Ausgabe eines Wertes 8 und die darauf folgende Ausgabe von 16 erschiene also als 816. Entsprechend sollten Sie zumindest ein paar Leerzeichen oder ein paar erläuternde Worte dazwischen setzen:

cout << "Eingabe war: " << Input
     << " Das Doppelte ist: " << Output << endl;

Spaltenweise

Schwieriger ist es, wenn Sie Tabellen anzeigen wollen. Um zu wissen, wie viele Leerzeichen Abstand zwischen die Zahlen gesetzt werden muss, müssten Sie zunächst ermitteln, wie viele Stellen jede Zahl hat. Um dies zu vereinfachen, gibt es einen so genannten Manipulator namens setw(). »setw« steht für »set width«, also »setze Breite«. Das w hat also nichts mit meinem Lieblingsbuchstaben zu tun. Dieser wird vor der eigentlichen Ausgabe an cout gesandt und bereitet die Formatierung der folgenden Ausgabe vor. Zwischen die Klammern von setw() schreiben Sie die Anzahl der Stellen, die für die nachfolgende Ausgabe reserviert werden sollen. Alle Stellen, die nicht von der Zahl selbst belegt werden, werden mit Leerzeichen so aufgefüllt, dass die Zahl rechtsbündig erscheint. Das folgende Beispiel sollte also dafür sorgen, dass die Zahlen der beiden Ausgabezeilen hübsch rechtsbündig nebeneinander stehen.

cout << setw(7) << 3233 << setw(6) << 128 << endl;
cout << setw(7) << 3 << setw(6) << 1 << endl;

Weitere Informationen zu Manipulatoren finden Sie an anderer Stelle.

Eingabestrom aus cin

Um Eingaben von der Tastatur zu lesen, wird die Datenquelle cin (Das »in« in cin steht für »ein«. Es ist also das Eingabe-Objekt. Die Herkunft des c wurde ja bereits bei cout erläutert.) auf die Variable umgeleitet. Der Eingabeoperator besteht genau spiegelverkehrt zum Ausgabeoperator aus zwei Größer-Zeichen. Sie weisen quasi vom cin auf die Variable, in der die Eingabe abgelegt werden soll.

[Ein einfacher Benutzerdialog (reinraus.cpp)]

#include <iostream.h>

main()
{
    int Zahleingabe;
    int Doppel;

    cout << "Bitte geben Sie eine Zahl ein!" << endl;
    cin >> Zahleingabe;
    Doppel = Zahleingabe * 2;
    cout << "Das Doppelte dieser Zahl ist "
        << Doppel << "." << endl;
}