es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función sleep() de no se ejecuta línea por línea en C.

La función sleep() parece no respetar la compilación línea por línea en C cada vez que ejecuto algo como esto:

#include <stdio.h>

#include <unistd.h>

int main(){
  int i=0;

while (i!=9){
    printf("sleep for 1 second");
    sleep(1);
    i++;
  }
  return 0;
}

El resultado termina siendo “sleep for 1 second” impreso 10 veces después de esperar 10 segundos, en lugar de imprimir “sleep for 1 second” cada segundo durante 10 segundos, que es lo deseado.
¿Alguien sabe por qué ocurre esto y cómo solucionarlo?</unistd.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema probablemente se debe a un almacenamiento en búfer. Cuando se utiliza printf, la salida se almacena en un búfer hasta que se encuentra un carácter de nueva línea o el búfer está lleno. En este caso, la instrucción printf no está seguida de un carácter de nueva línea, por lo que la salida se almacena en un búfer en cada iteración del bucle. Cuando el programa finalmente sale del bucle, toda la salida almacenada en el búfer se imprime de una vez.

    Para solucionar esto, simplemente agregue un carácter de nueva línea a la instrucción printf:

    printf("dormir durante 1 segundo\n");
    

    Esto asegurará que la salida se imprima línea por línea como se espera.

Comments are closed.