2011-04-15 23 views
6

Quiero hacer mi programa para imprimir algo, y luego esperar durante unos segundos y luego imprimir algo más en la misma línea. He tratado de escribir como:impresión en la misma línea con una pausa en C

printf ("bla bla bla"); 
sleep (2); 
printf ("yada yada yada\n"); 

pero en la salida llego a esperar 2 segundos y entonces consigo toda la línea impresa como uno. Cuando traté de poner la salida en diferentes líneas, imprimí con una pausa.

¿Cómo puedo hacer que se imprima con una pausa en la misma línea?

* Trabajar en Linux

+4

fflush (stdout); – Erik

+0

Según su necesidad, 'fflush' puede ser solo el comienzo del problema. Ver [mi respuesta] (http://superuser.com/q/239893/1711) a una pregunta desde que se movió a SuperUser para un ejemplo de trabajo moderadamente completo. – dmckee

Respuesta

17
printf ("bla bla bla"); 
fflush(stdout); 
sleep (2); 
printf ("yada yada yada\n"); 

fflush obliga al buffer interno stdout a ser enviado a la pantalla.

3

El stdout es una corriente buffer de línea por defecto, esto significa que usted necesita para eliminar de manera explícita. Se vacía implícitamente en nueva línea. Este comportamiento es obligatorio según el estándar C99.

Esto significa que en su primera printf, se añade el texto en un búfer interno. Esto se hace para mejorar la eficiencia, p. al imprimir muchos fragmentos de texto pequeños.

Su segundo printf contiene una nueva línea, y que hace que la corriente para obtener enrojecida. Puede vaciar explícitamente stdout a través del fflush(stdout); si lo desea.

Como alternativa, también puede utilizar el stderr sin búfer, como en fprintf(stderr, "bla bla bla");, pero como su nombre lo indica está destinado a errores y advertencias.

Véase también la cuestión de forma Why does printf not flush after the call unless a newline is in the format string?.