stdin, stdout, stderr
Von cppreference.com
| 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.
Führen Sie diesen Code aus
#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) | |
| schreibt in den Standard-C-Ausgabestrom stdout (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr, unbuffered (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr (globales Objekt) | |
| (C++11) |
gibt formatierte Ausgabe auf stdout, einen Dateistrom oder einen Puffer aus (Funktion) |
| Objekttyp, der alle für die Steuerung eines C-I/O-Streams benötigten Informationen speichern kann (typedef) | |
| C-Dokumentation für stdin, stdout, stderr
| |