Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: puchi en 15 Diciembre 2016, 12:30 pm



Título: no detecto el error
Publicado por: puchi en 15 Diciembre 2016, 12:30 pm
Buenas, intento hacer funcionar este código pero no me funciona.

La idea que tengo es primero que imprima una letra y despues de 1 segundo la otra en la misma linea pero resulta que no imprime nada.

Utilizo maquina linux.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(){
   
    while(1){

       
        putchar('F');
        sleep(1);
        putchar('G');
        sleep(1);
    }

    return 0;
}


Título: Re: no detecto el error
Publicado por: avesudra en 15 Diciembre 2016, 12:50 pm
Hola, tienes que vaciar el fichero stdout antes de llamar a la función sleep.

Mira aquí: http://stackoverflow.com/questions/13568388/c-sleep-function-not-working

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5.  
  6. int main(){
  7.  
  8.    while(1){
  9.  
  10.        fflush(stdout);
  11.        putchar('F');
  12.        sleep(1);
  13.        fflush(stdout);
  14.        putchar('G');
  15.        sleep(1);
  16.    }
  17.  
  18.    return 0;
  19. }


Título: Re: no detecto el error
Publicado por: puchi en 15 Diciembre 2016, 13:05 pm
Me cuesta entender un poco el problema que ocurre. Básicamente dice que si esperas 40s te aparecera todo impreso por pantalla o si no quieres esperar que utilices fflush(stdout) pero esta funcion que es lo que hace realmente?


Título: Re: no detecto el error
Publicado por: MAFUS en 15 Diciembre 2016, 15:40 pm
Un programa en C tiene implícitas dos salidas estándar y una entrada estándar.

Las dos salidas estándar son:
1. stdout, que es un buffer donde el programa escribe en él y se descarga en pantalla, normalmente, ante ciertas circunstancias.

2. stderr, que es una salida inmediata normalmente hacia la pantalla. Cuándo se escribe en ella directamente se visualiza.

printf, puts, putchar, etc. escriben en stdout. Para forzar el vaciado de ese buffer se usa fflush(stdout). fflush fuerza el vaciado del buffer de salida que se le ha pasado como argumento.