Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< cpp ‎ | io ‎ | c
Definido en el encabezado <cstdio>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

Tres flujos de texto están predefinidos. Estos flujos se abren implícitamente y no están orientados al inicio del programa.

1) Asociado con el flujo de entrada estándar , utilizado para leer la entrada convencional. Al inicio del programa, el flujo está completamente almacenado en búfer si y solo si se puede determinar que el flujo no se refiere a un dispositivo interactivo.
2) Asociado con el flujo de salida estándar , utilizado para escribir la salida convencional. Al inicio del programa, el flujo está completamente almacenado en búfer si y solo si se puede determinar que el flujo no se refiere a un dispositivo interactivo.
3) Asociado con el flujo de error estándar , utilizado para escribir salida de diagnóstico. Al inicio del programa, el flujo no está completamente almacenado en búfer.

Lo que constituye un dispositivo interactivo está definido por la implementación.

Estas macros se expanden a expresiones de tipo std:: FILE * .

Notas

Aunque no está mandatado por POSIX, la convención UNIX es que stdin y stdout tengan búfer por líneas si están asociados a una terminal y stderr no tenga búfer.

Estas macros pueden expandirse a lvalues modificables. Si cualquiera de estos std:: FILE * lvalue es modificado, operaciones posteriores en el flujo correspondiente resultan en comportamiento no especificado o indefinido.

Ejemplo

Este ejemplo muestra una función similar a 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);
}

Salida posible:

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

Véase también

lee del flujo de entrada estándar de C stdin
(objeto global)
escribe al flujo de salida estándar de C stdout
(objeto global)
escribe al flujo de error estándar de C stderr , sin búfer
(objeto global)
escribe al flujo de error estándar de C stderr
(objeto global)
imprime salida formateada a stdout , un flujo de archivo o un búfer
(función)
tipo de objeto, capaz de contener toda la información necesaria para controlar un flujo de E/S de C
(typedef)
Documentación de C para stdin , stdout , stderr