Ayuda con delay entre letras

Iniciado por defalt_, 4 Noviembre 2017, 02:47 AM

0 Miembros y 1 Visitante están viendo este tema.

defalt_

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):

#include <stdio.h>
#include <string.h>

int main(){
int i,a;
char frase[41]={"Esto es una prueba de pausas entre letras"};
for(i=0;i<41;i++){
printf("%c",frase[i]);
for(a=0;a<31250000;a++){}
a==0;
}
return 0;
}

JavierScars

#1
time.h te puede ayudar...

-A parte no estas haciendo a = 0 si no que estas comparando a con 0... eso devuelve true...
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

defalt_

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

int i,a;
for(i=0;i<29;i++){
printf("%c",frase[i]);
for(a=0;a<31250000;a++){}
a=0;
}

ivancea96

#3
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:
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.

defalt_

Cita de: 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:
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