printf no imprime en pantalla

2 minutos de lectura

avatar de usuario
usuario1060986

Si trato de ejecutar el siguiente código simple bajo Cygwin en Windows 7,

#include <stdio.h>
int main() {
int i1, i2, sums;

printf( "Enter first integer\n" );
scanf( "%d", &i1 );

printf( "Enter second integer\n" );
scanf( "%d", &i2 );

sums = i1 + i2;
printf( "Sum is %d\n", sums );

return 0;
}

se compila (a través de gcc) sin problemas, pero cuando trato de ejecutarlo, la primera declaración (“Ingrese el primer número entero”) no se imprime en la terminal, y tengo que ingresar dos números sucesivos (por ejemplo, 3 y 4) antes de que llegue,

3
4
Enter first integer
Enter second integer
Sum is 7

¿Alguien puede explicarme qué está pasando aquí? Esto funciona perfectamente bien bajo MinGW.

  • Intente ejecutar la aplicación en la terminal de cygwin.

    – Akhil

    1 de junio de 2013 a las 7:44

  • De acuerdo a §7.21.3 ¶3 de la norma ISO C, se supone que el flujo de salida se vacía automáticamente cuando se solicita una nueva entrada del sistema operativo. Sin embargo, esto no es estrictamente requerido por ISO C. Por lo tanto, esto no es un error en cygwin. Simplemente no está bien implementado.

    – Andreas Wenzel

    22 de febrero a las 23:42

  • 14 horas después de que se publicó esta pregunta, se publicó esta pregunta duplicada, que ha tenido una actividad significativamente mayor. Probablemente sería apropiado cerrar una de las preguntas como un duplicado de la otra. Sin embargo, no estoy seguro de cuál debe cerrarse, porque uno ha tenido más actividad, pero el otro se preguntó antes.

    – Andreas Wenzel

    23 de febrero a las 0:13

Como dijo @thejh, su transmisión parece estar almacenada en búfer. Los datos aún no se escriben en la secuencia controlada.

En lugar de jugar con la configuración del búfer, podría llamar fflush después de cada escritura para beneficiarse del búfer y seguir aplicando explícitamente el comportamiento/visualización deseado.

printf( "Enter first integer\n" );
fflush( stdout );
scanf( "%d", &i1 );

  • Muchas gracias, sí, eso es todo. Muy apreciado.

    – usuario1060986

    1 de junio de 2013 a las 16:27

puede intentar deshabilitar el almacenamiento en búfer en stdout usando

setbuf(stdout, NULL);

  • Pregunta; ¿Este compilador/cadena de herramientas depende o depende de la plataforma? ¿Se puede deshabilitar con un indicador del compilador?

    – Andy J.

    30 de agosto de 2018 a las 8:01

Parece que la salida de su programa está almacenada en búfer. Intente habilitar el almacenamiento en búfer de línea explícitamente:

setlinebuf(stdout);

  • Muchas gracias, sí, eso también funcionó. Muy apreciado.

    – usuario1060986

    1 de junio de 2013 a las 16:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad