La Web del Programador: Comunidad de Programadores
 
    Pregunta:  49037 - PROBLEMAS CON PRINTF + FUNCIONES DE ESPERA.
Autor:  Pedro Urbina Escos
Buenas!! Llevo un tiempo desarrollando en C y siempre me encuentro con el mismo problema. Cuando uso funciones como semaforos, sleep, pause precedido de un printf surge el siguiente problema. Para en el sleep o pause sin imprimir por pantalla nada y cuando cesa la espera, sucede el printf. Ejemplo:

....
printf("Esperando senial del servidor ...);
pause();
printf("OK\n");
....

Durante el tiempo que pasa esperando la señal no hay ningun mensaje. Cuando termina la espera imprime "Esperando senial del servidor...OK\n" directamente.

¿Sabeis que pasa? ¿Puede ser que al pasarle el control a otro proceso ceda tambien el control de la pantalla? ¿Se os ocurre alguna solucion? Gracias por vuestro tiempo.

  Respuesta:  Paul Manjarres
Hola, con respecto a tu problema sucede lo siguiente:

Cuando en C vas a escribir algo en pantalla sucede que primero se coloca en un buffer o flujo de salida, luego el contenido de este buffer es llevado a la pantalla. Cuando se utiliza printf no siempre se vacia el buffer, es decir, se dejan listas las palabras a escribir pero no se escriben; cuando ocurre la pausa no se ha vaciado el buffer y por lo tanto no se ve nada en pantalla.

Para arreglar este defecto debe obligar a que se vacie el buffer del flujo de salida, para esto se debe usar la funcion fflush(stdout), con esto se indica precisamente vaciar el buffer de salida.

Espero haber ayudado.

Att