Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: defalt_ en 4 Noviembre 2017, 02:47 am



Título: Ayuda con delay entre letras
Publicado por: defalt_ en 4 Noviembre 2017, 02:47 am
Buenas, tengo un problema y no se por que me pasa, el tema es que tengo que hacer un trabajo para el instituto y necesito hacer mini-delays entre cada letra de una cadena como para hacer una animación de barrido. En consola de Windows me funciona perfectamente, el problema es que los ordenadores de mi instituto son linux, lo he probado en consola de linux y resulta que no funciona igual, en vez de hacer cada delay entre letras, hace la espera al principio y despues imprime de golpe la frase. Al principio pense que seria por el tiempo de reloj de cada procesador al ser diferentes ordenadores pero tambien lo intente en entorno linux en mi propio ordenador y sucede lo mismo que en mi instituto. ¿No debería funcionar igual o hay algo que hace diferente cada consola al ejecutar? Os dejo el codigo por aqui abajo (el tiempo del segundo bucle esta medido, ya os digo, si lo copiais y lo probais en Windows funciona perfectamente):

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. int i,a;
  6. char frase[41]={"Esto es una prueba de pausas entre letras"};
  7. for(i=0;i<41;i++){
  8. printf("%c",frase[i]);
  9. for(a=0;a<31250000;a++){}
  10. a==0;
  11. }
  12. return 0;
  13. }
  14.  


Título: Re: Ayuda con delay entre letras
Publicado por: JavierScars en 4 Noviembre 2017, 03:10 am
time.h te puede ayudar...

-A parte no estas haciendo a = 0 si no que estas comparando a con 0... eso devuelve true...


Título: Re: Ayuda con delay entre letras
Publicado por: defalt_ en 4 Noviembre 2017, 13:32 pm
Nada, tambien probe añadiendo time.h y sigue sin funcionar, lo raro es que funcione en windows y en linux no, tambien he cambiado a==0; por a=0; y sigue sin ir

Código
  1. int i,a;
  2. for(i=0;i<29;i++){
  3. printf("%c",frase[i]);
  4. for(a=0;a<31250000;a++){}
  5. a=0;
  6. }


Título: Re: Ayuda con delay entre letras
Publicado por: ivancea96 en 4 Noviembre 2017, 13:41 pm
La salida por consola es un buffer, es decir, antes de mostrarse en consola, los datos se almacenan.
Cuando escribes una letra, en vez de ir a la consola, va al buffer. (Temas de eficiencia)
El buffer se envía a la consola eventualmente de forma automática o manual.
Como tu programa está trabajando continuamente, no llega a enviar el buffer. tendrás que hacerlo manualmente.
Para ello, invoca la función:
Código
  1. fflush(stdout);
Cada vez que quieras asegurarte de imprimer algo en consola (en este caso, después del printf)

Por cierto, para hacer pausas, mejor utiliza Sleep(ms) de la librería <windows.h> (en caso de que estés en windows), o alguna otra utilidad relacionada con el tiempo. De este modo, evitas que tu programa consuma exceso de CPU.


Título: Re: Ayuda con delay entre letras
Publicado por: defalt_ en 6 Noviembre 2017, 20:26 pm
La salida por consola es un buffer, es decir, antes de mostrarse en consola, los datos se almacenan.
Cuando escribes una letra, en vez de ir a la consola, va al buffer. (Temas de eficiencia)
El buffer se envía a la consola eventualmente de forma automática o manual.
Como tu programa está trabajando continuamente, no llega a enviar el buffer. tendrás que hacerlo manualmente.
Para ello, invoca la función:
Código
  1. fflush(stdout);
Cada vez que quieras asegurarte de imprimer algo en consola (en este caso, después del printf)

Por cierto, para hacer pausas, mejor utiliza Sleep(ms) de la librería <windows.h> (en caso de que estés en windows), o alguna otra utilidad relacionada con el tiempo. De este modo, evitas que tu programa consuma exceso de CPU.

Entendido! Ahora va perfectamente, muchas gracias :D