Luego de leer el artículo C/C++: Indicador de progreso de La plaga Tux, me vino a la mente ese indicador de progreso que tiene ese aspecto de “barrita” girando sobre su propio eje.
Entonces, tiempo libre mediante, en principio tomé el artículo original y porté el código de C++ a C (nada de otro mundo). Tal artículo me hizo recordar que hay vida más allá del \n recordándome el \r. Pero como una cosa va encadenada a la otra, también me hizo recordar el \b.
Para quienes hasta aquí me leen perdidos o necesitan un refresco de su memoria, les recuerdo que en el formato de impresión se pueden utilizar varias secuencias de control de cursor:
- \n: nueva línea
- \r: retorno de carro
- \b: backspace
- \t: tab
- etc.
Con esto, ya tenemos todos los fundamentos para que puedas entender los ejemplos.
- Indicador de progreso portado de C++ a C de la versión original del artículo:
#include <stdio.h>
int main ( int argc , char **argv )
{
const short operations = 500;
float inc = 100.0f / ((float)operations-1.0);
float progress = 0.0f;
short i,pos=0;
for ( i=0; i<operations; i++ ) {
progress+=inc;
fprintf( stdout, “Progreso: %d\r“ , (int)progress ); fflush(stdout);
usleep(500000);
}
return EXIT_SUCCESS;
}
- “Barrita” de progreso girando sobre su propio eje:
#include <stdio.h>
#include <string.h>
int main ( int argc , char **argv )
{
const char s[] = “-\\|/-\\|/”;
const short operations = 500;
short i,pos=0;
for ( i=0; i<operations; i++ ) {
fprintf( stdout, “Progreso: %c\r“ , s[pos] ); fflush(stdout);
pos++;
if ( pos>=strlen(s) )
pos=0;
usleep(500000);
}
return EXIT_SUCCESS;
}
Espero que haya servido, a mi al menos me sirve para agregarlo a mi base de conocimientos (mi blog
)


Casdiablo
noviembre 18, 2009
WOW! Genial post… siempre me pregunté como hacían para ir imprimiendo sin que saltara a la siguiente línea. Muchas gracias, voy a tenerlo en los marcadores por si lo necesito algún día
piponazo
noviembre 18, 2009
Gracias por hacer referencia a mi artículo. También me interesaba mucho hacer un indicador como el que comentas, así que me ha venido de perlas
Luciano
noviembre 19, 2009
Bueno, me alegra que les haya sido util… son esos apuntes que nunca están de más