C++ Grundlegende Eingabe/Ausgabe: Beispiel Cout, Cin, Cerr

โšก Intelligente Zusammenfassung

C++ Bei den Ein- und Ausgabevorgรคngen werden Stream-Objekte verwendet, die Daten als Bytefolgen zwischen Programmen und Gerรคten รผbertragen. Dabei liest cin die Tastatureingaben, wรคhrend cout, cerr und clog die Ausgaben auf dem Bildschirm ausgeben.

  • ๐Ÿ”˜ Strรถme: Eingabe- und Ausgabevorgรคnge werden als Bytefolgen, sogenannte Datenstrรถme, รผbertragen und verschieben Daten zwischen Hauptspeicher und Endgerรคten.
  • ๐Ÿ“ฅ Headerdateien: Die Bibliotheken iostream, iomanip und fstream definieren die Objekte und Manipulatoren, die fรผr die grundlegende Ein- und Ausgabe verwendet werden.
  • ๏ธ cout und cin: Das cout-Objekt gibt Werte mit dem Einfรผgeoperator aus, wรคhrend cin Werte mit dem Exponenten liest.tractionsoperator.
  • โš ๏ธ cerr und clog: Beide melden Fehler, doch cerr bleibt ungepuffert und wird sofort angezeigt, wรคhrend clog die Meldungen zuerst puffert.
  • ๏ธ Fehlerbehandlung: Die Prรผfungen good, bad, fail und eof lesen den Stream-Status, sodass fehlgeschlagene Operationen sicher abgefangen werden.
  • ๐Ÿค– KI-Unterstรผtzung: KI-gestรผtzte Codierungsassistenten wie GitHub Copilot generieren cin- und cout-Boilerplate-Code aus einem kurzen Kommentar oder Funktionsnamen.

C++ Grundlegende Eingabe-/Ausgabe

Was sind Streams in C++?

C++ stellt Benutzern eine Reihe von Bibliotheken zur Verfรผgung, mit denen sie Eingabe-/Ausgabeaufgaben ausfรผhren kรถnnen. Diese Aufgaben werden in Form von Bytesequenzen ausgefรผhrt, die allgemein als Streams bezeichnet werden.

Die Streams sind zweigeteilt:

Arten von Streams

  • Eingabestrom: Hierbei handelt es sich um eine Art Stream, bei dem die Bytes von einem Gerรคt wie einer Tastatur zum Hauptspeicher flieรŸen.
  • Ausgabestrom: Dabei handelt es sich um eine Art Stream, bei dem die Bytes in die entgegengesetzte Richtung flieรŸen, also vom Hauptspeicher zum Gerรคt, beispielsweise zum Bildschirm.

Wie funktionieren Streams?

C++ Streams funktionieren wie folgt:

  1. Zunรคchst wird ein Stream mit dem richtigen Typ initialisiert.
  2. Als Nรคchstes sollten Sie mithilfe von Get-/Put-Zeigern angeben, wo die Ein-/Ausgabe erfolgen soll.
  3. Nachdem Sie die richtige Position in einem Stream erreicht haben, kรถnnen Sie Eingabe- und Ausgabeaufgaben mit den Operatoren >> bzw. << ausfรผhren.

Funktionstabelle

Die folgenden Funktionen sind in der Headerdatei stream.h enthalten:

KlasseFunktionen
FilebufEs setzt Dateipuffer zum Lesen/Schreiben. Es enthรคlt die Funktionen close() und open()
fstreambaseEs handelt sich um die Basisklasse fรผr die Klassen ifstream, fstream und ofstream. Die Operationen sind fรผr die Dateistrรถme gleich.
ifstreamEs handelt sich um eine Eingabedatei-Stream-Klasse zum Bereitstellen von Eingabevorgรคngen.
ofstreamEs handelt sich um eine Ausgabedatei-Stream-Klasse zum Bereitstellen von Ausgabevorgรคngen.
fstreamEs handelt sich um eine Eingabe-/Ausgabe-Stream-Klasse. Sie unterstรผtzt gleichzeitige Eingabe-/Ausgabevorgรคnge.

C++ Headerdateien fรผr Eingabe/Ausgabe

C++ bietet drei Bibliotheken mit Funktionen zur Durchfรผhrung grundlegender Ein-/Ausgabeaufgaben. Dazu gehรถren:

  • Iostream: Es ist ein Akronym fรผr Standard Input/Output Stream. Diese Header-Datei enthรคlt Definitionen fรผr Objekte wie cin/cout/cerr.
  • Iomanip: Es ist ein Akronym fรผr Input/Output Manipulators. Die Bibliothek verfรผgt รผber Funktionen, die zur Manipulation von Streams verwendet werden kรถnnen. Es enthรคlt Definitionen fรผr Objekte wie setw, setprecision und andere.
  • Fstream: Dies ist eine Header-Datei zur Beschreibung des Dateistreams. Es verarbeitet Daten, die aus einer Datei als Eingabe gelesen oder in eine Datei geschrieben werden (Ausgabe).

Die Schlรผsselwรถrter cin und cout sind sehr beliebt in C++. Sie werden verwendet, um Eingaben entgegenzunehmen bzw. Ausgaben zu drucken. Um sie zu verwenden, mรผssen Sie die iostream-Headerdatei in Ihr Programm einbinden. Der Grund dafรผr ist, dass sie in dieser Headerdatei definiert sind. Wenn die iostream-Headerdatei nicht eingebunden wird, wird ein Fehler generiert. Dies ist auf einen Fehler des C++ Compiler, um die Bedeutung der Schlรผsselwรถrter zu verstehen.

Die wichtigsten in der iostream-Headerdatei definierten Objekte sind cin, cout, cerr und clog. Lassen Sie uns darรผber diskutieren.

std :: cout

Das cout-Objekt ist eine Instanz der iostream-Klasse. Es wird verwendet, um Ausgaben auf einem Standardausgabegerรคt zu erzeugen, was normalerweise der Bildschirm ist. Es wird zusammen mit dem Stream-Einfรผgungsoperator (<<) verwendet.

Beispiel

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Ausgang:

std :: cout

Hier ist ein Screenshot des Codes:

std :: cout

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Headerdatei ein, in der das Cout-Objekt definiert ist.
  2. SchlieรŸen Sie den std-Namespace ein, damit wir ihn bei Verwendung seiner Klassen nicht aufrufen mรผssen.
  3. Rufen Sie die Funktion main() auf. Der Programmcode sollte in seinen Hauptteil eingefรผgt werden. Die รถffnende geschweifte Klammer { markiert den Anfang seines Kรถrpers.
  4. Erstelle eine Zeichenvariable namens โ€žwelcomeโ€œ, die die Zeichenkette โ€žWillkommen beiโ€œ speichert. Guru99
  5. Drucken Sie den Wert der Zeichenfolge welcome auf der Konsole. Das endl ist ein C++ Schlรผsselwort bedeutet Zeilenende. Es bewegt den Cursor, um mit dem Drucken des Textes in der nรคchsten Zeile zu beginnen.
  6. Das Programm muss bei erfolgreicher Ausfรผhrung einen Wert zurรผckgeben.
  7. Ende des Hauptteils der Funktion main().

std::cin

Das `cin`-Objekt ist eine Instanz der `istream`-Klasse. Es liest Eingaben vom Eingabegerรคt, der Tastatur. Normalerweise wird es zusammen mit dem `ex`-Objekt verwendet.tractionsoperator (>>). Der extracDas tionsobjekt ist fรผr ex verantwortlichtracDaten, die รผber die Tastatur vom CIN-Objekt eingegeben werden.

Beispiel

Das folgende Beispiel zeigt die Verwendung des Schlรผsselworts cin in C++:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

Ausgang:

std::cin

Hier ist ein Screenshot des Codes:

std::cin

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei in unser Programm ein. Das cin-Objekt wird in dieser Header-Datei definiert.
  2. SchlieรŸen Sie den std-Namespace ein, um seine Klassen zu verwenden. Sie mรผssen std nicht aufrufen, wenn Sie seine Klassen verwenden.
  3. Rufen Sie die Funktion main() auf. Der Programmcode sollte in seinen Hauptteil eingefรผgt werden.
  4. Der Beginn des Hauptteils des Programms.
  5. Deklarieren Sie eine ganzzahlige Variable benannte Nummer.
  6. Drucken Sie eine Meldung auf dem Bildschirm, die den Benutzer zur Eingabe einer Nummer auffordert.
  7. Lesen Sie den vom Benutzer an der Konsole eingegebenen Wert รผber die Tastatur ab.
  8. Drucken Sie den oben gelesenen Wert zusammen mit anderem Text auf der Konsole aus.
  9. Das Programm sollte einen Wert zurรผckgeben, wenn es erfolgreich ausgefรผhrt wird.
  10. Ende des Kรถrpers der Hauptfunktion.

std::cerr

Das cerr-Objekt bildet den Standardfehlerstrom zur Ausgabe von Fehlern in C++. Cerr ist eine Instanz der Klasse ostream. Das cerr-Objekt ist ungepuffert. Das heiรŸt, es wird verwendet, wenn eine Fehlermeldung sofort angezeigt werden soll.

Da es ungepuffert ist, speichert es keine Fehlermeldung fรผr eine spรคtere Anzeige. Es wird zusammen mit dem Stream-Einfรผgungsoperator (<<) verwendet.

Beispiel

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

Ausgang:

std::cerr

Hier ist ein Screenshot des Codes:

std::cerr

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei ein, in der das Cerr-Objekt definiert wurde.
  2. SchlieรŸen Sie den std-Namespace ein, damit wir ihn bei Verwendung seiner Klassen nicht aufrufen mรผssen.
  3. Rufen Sie die Funktion main() auf. Die Programmlogik sollte in den Hauptteil eingefรผgt werden. Die รถffnende geschweifte Klammer markiert den Anfang des Funktionskรถrpers.
  4. Verwenden Sie das cerr-Objekt, um einen Fehler auf der Konsole auszugeben.
  5. Das Programm muss bei erfolgreicher Ausfรผhrung einen Wert zurรผckgeben.
  6. Ende des Kรถrpers der Hauptfunktion.

std::clog

Das clog-Objekt ist eine Instanz der ostream-Klasse. Es wird verwendet, um Fehler auf der Standardanzeige, dem Monitor, anzuzeigen. Es รคhnelt dem cerr-Objekt, ist aber gepuffert. Da es gepuffert ist, speichert es die Fehlermeldung im Puffer, bis der Puffer gefรผllt/geleert ist. Es wird zusammen mit dem Stream-Einfรผgungsoperator (<<) verwendet.

Beispiel

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

Ausgang:

std::clog

Hier ist ein Screenshot des Codes:

std::clog

Code Erlรคuterung:

  1. EinschlieรŸlich der iostream-Header-Datei, in der das Clog-Objekt definiert ist.
  2. EinschlieรŸlich des std-Namespace, damit wir seine Klassen verwenden kรถnnen, ohne ihn aufzurufen.
  3. Aufruf der Funktion main(). Die Programmlogik sollte in den Hauptteil eingefรผgt werden. Das { markiert den Anfang des Funktionskรถrpers.
  4. Verwenden Sie das Clog-Objekt, um einen Fehler auf der Standardausgabe, dem Monitor, auszugeben.
  5. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  6. Das Ende des Hauptteils der Funktion main().

Fehlerbehandlung mit IO-Streams

Die gleichen Stream-Objekte melden auch, ob eine Operation erfolgreich war, was durch Stream-Statusprรผfungen ermittelt wird.

Um zu รผberprรผfen, ob ein Stream gรผltig ist oder nicht, kรถnnen Sie ihn als Booleschen Wert verwenden.

Ein Beispiel:

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

Um weitere Details zum Stream-Status zu erhalten, kรถnnen Sie diese Funktionen verwenden:

  • good() โ€“ gibt true zurรผck, wenn alles in Ordnung ist.
  • bad() โ€“ gibt true zurรผck, wenn ein schwerwiegender Fehler auftritt.
  • fail() โ€“ gibt nach einem erfolglosen Stream-Vorgang โ€žtrueโ€œ zurรผck.
  • eof()- gibt true zurรผck, wenn das Ende einer Datei erreicht wird.

Um festzustellen, ob ein bestimmter Lese-/Schreibvorgang fehlgeschlagen ist, testen Sie das Leseergebnis.

Um beispielsweise zu รผberprรผfen, ob der Benutzer eine gรผltige Ganzzahl eingegeben hat, gehen Sie wie folgt vor:

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

Hรคufig gestellte Fragen

Das `cout`-Objekt ist typsicher und verwendet den Einfรผgeoperator, sodass es den Typ jedes Wertes automatisch erkennt. Die `printf`-Funktion in C hingegen benรถtigt Formatbezeichner wie `%d`, die manuell mit den Argumenten abgeglichen werden mรผssen.

Die ExtracDer `tion`-Operator stoppt beim ersten Leerzeichen, daher liest `cin` nur ein Wort. Um eine ganze Zeile inklusive Leerzeichen zu erfassen, rufen Sie `getline(cin, Variable)` auf, das bis zum Zeilenumbruchzeichen liest.

Beide Befehle beginnen eine neue Zeile, aber `endl` leert jedes Mal den Ausgabepuffer, was Schleifen mit hoher Auslastung verlangsamen kann. Verwenden Sie daher lieber einen einfachen Zeilenumbruch und reservieren Sie `endl` fรผr Fรคlle, in denen der Puffer sofort geleert werden muss.

Die Objekte `cin`, `cout`, `cerr` und `clog` befinden sich im Namensraum `std`. Durch die Verwendung von `using namespace std` kann man `cout` anstelle von `std::cout` schreiben. In groรŸen Projekten wird oft das Prรคfix `std` explizit verwendet, um Namenskonflikte zu vermeiden.

Fรผgen Sie den iomanip-Header ein und verwenden Sie Manipulatoren mit cout. Der setw-Manipulator reserviert eine Feldbreite, und setprecision legt fest, wie viele Ziffern angezeigt werden. Dadurch werden Zahlen und Spalten formatiert, ohne die gespeicherten Werte zu verรคndern.

Ja. Da `cout` und `cerr` separate Datenstrรถme sind, kann eine Shell die normale Ausgabe in eine Datei umleiten, wรคhrend Fehler weiterhin auf dem Bildschirm angezeigt werden. Im Code kann `rdbuf` einen Datenstrom auf einen anderen Puffer verweisen.

Ja. KI-Codierungsassistenten lesen einen Kommentar oder Funktionsnamen und erzeugen cin- und cout-Anweisungen sowie die iostream-Einbindung und eine formatierte Eingabeaufforderung. RevEs ist ratsam, die generierte Stream-Logik fรผr Grenzfรคlle zu รผberprรผfen.

Ja. GitHub-Copilot Erledigt die cout-Formatierung, cin-Validierungsschleifen und cerr-Fehlerprรผfungen wรคhrend der Eingabe. Es ist 2026. C++ Code Intelligence fรผgt semantisches Symbolbewusstsein hinzu, sodass Vorschlรคge fรผr mehrere Dateien konsistent bleiben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: