Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

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

1) Verbunden mit dem standard input -Stream, verwendet zum Lesen konventioneller Eingaben. Beim Programmstart ist der Stream vollständig gepuffert, genau dann wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
2) Assoziiert mit dem standard output -Stream, verwendet zum Schreiben von konventioneller Ausgabe. Beim Programmstart ist der Stream vollständig gepuffert, wenn und nur wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
3) Verbunden mit dem Standardfehler -Stream, verwendet zum Schreiben von Diagnoseausgaben. Beim Programmstart ist der Stream nicht vollständig gepuffert.

Was ein interaktives Gerät ausmacht, ist implementierungsdefiniert.

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

Hinweise

Obwohl nicht von POSIX vorgeschrieben, ist es nach UNIX-Konvention üblich, dass stdin und stdout zeilengepuffert sind, wenn sie mit einem Terminal verbunden sind, und stderr ungepuffert ist.

Diese Makros können zu modifizierbaren L-Werten expandiert werden. Wenn einer dieser std:: FILE * L-Werte modifiziert wird, führen nachfolgende Operationen auf dem entsprechenden Stream zu nicht spezifiziertem oder undefiniertem Verhalten.

Beispiel

Dieses Beispiel zeigt eine Funktion ähnlich zu 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

Siehe auch

liest vom standard C-Eingabestream stdin
(globales Objekt)
schreibt in den standard C-Ausgabestream stdout
(globales Objekt)
schreibt in den standard C-Fehlerstream stderr , ungepuffert
(globales Objekt)
schreibt in den standard C-Fehlerstream stderr
(globales Objekt)
gibt formatierten Output an stdout , einen Dateistream oder einen Buffer aus
(Funktion)
Objekttyp, der alle Informationen zur Steuerung eines C-I/O-Streams halten kann
(Typdefinition)
C-Dokumentation für stdin , stdout , stderr