Namensräume
Varianten
Aktionen

stdin, stdout, stderr

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
stdinstdoutstderr
Funktionen
Datei-Zugriff
Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 
Definiert in Header <cstdio>
#define stdin  /* implementierungsabhängig */
(1)
#define stdout /* implementierungsabhängig */
(2)
#define stderr /* implementierungsabhängig */
(3)

Drei Textströme sind vordefiniert. Diese Ströme werden beim Programmstart implizit geöffnet und sind unorientiert.

1) Verbunden mit dem Standard-Eingabestrom, der zum Lesen konventioneller Eingaben verwendet wird. Beim Programmstart ist der Strom vollständig gepuffert, wenn und nur wenn festgestellt werden kann, dass der Strom nicht auf ein interaktives Gerät verweist.
2) Verbunden mit dem Standard-Ausgabestrom, der zum Schreiben konventioneller Ausgaben verwendet wird. Beim Programmstart ist der Strom vollständig gepuffert, wenn und nur wenn festgestellt werden kann, dass der Strom nicht auf ein interaktives Gerät verweist.
3) Verbunden mit dem Standard-Fehlerstrom, der zum Schreiben von Diagnoseausgaben verwendet wird. Beim Programmstart ist der Strom nicht vollständig gepuffert.

Was ein interaktives Gerät darstellt, ist implementierungsabhängig.

Diese Makros werden zu Ausdrücken vom Typ std::FILE* erweitert.

[bearbeiten] Hinweise

Obwohl nicht von POSIX vorgeschrieben, ist die UNIX-Konvention, dass stdin und stdout zeilenweise gepuffert sind, wenn sie mit einem Terminal verbunden sind, und stderr unbuffered ist.

Diese Makros können zu modifizierbaren Lvalues erweitert werden. Wenn eines dieser std::FILE* Lvalues modifiziert wird, führen nachfolgende Operationen auf dem entsprechenden Strom zu nicht spezifiziertem oder undefiniertem Verhalten.

[bearbeiten] Beispiel

Dieses Beispiel zeigt eine Funktion ähnlich wie std::printf.

#include <concepts>
#include <cstdio>
#include <type_traits>
 
template<typename T>
concept IsPrintable = std::integral<T> or std::floating_point<T> or std::is_pointer_v<T>;
 
int my_printf(char const* const format, IsPrintable auto const ... arguments)
{
    return std::fprintf(stdout, format, arguments...);
}
 
int main(int argv, char*[])
{
    my_printf("Strings and chars:\t%s %c\n", "hello", 'x');
    my_printf("Rounding:\t\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
    my_printf("Padding:\t\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
    my_printf("Scientific:\t\t%E %e\n", 1.5, 1.5);
    my_printf("Hexadecimal:\t\t%a %A 0x%X\n", 1.5, 1.5, &argv);
}

Mögliche Ausgabe

Strings and chars:  hello x
Rounding:           1.500000 2 1.30000000000000004440892098500626
Padding:            01.50 1.50  1.50
Scientific:         1.500000E+00 1.500000e+00
Hexadecimal:        0x1.8p+0 0X1.8P+0 0x2CFB41BC

[bearbeiten] Siehe auch

liest vom Standard-C-Eingabestrom stdin
(globales Objekt)[bearbeiten]
schreibt in den Standard-C-Ausgabestrom stdout
(globales Objekt)[bearbeiten]
schreibt in den Standard-C-Fehlerstrom stderr, unbuffered
(globales Objekt)[bearbeiten]
schreibt in den Standard-C-Fehlerstrom stderr
(globales Objekt)[bearbeiten]
gibt formatierte Ausgabe auf stdout, einen Dateistrom oder einen Puffer aus
(Funktion) [bearbeiten]
Objekttyp, der alle für die Steuerung eines C-I/O-Streams benötigten Informationen speichern kann
(typedef) [bearbeiten]
C-Dokumentation für stdin, stdout, stderr