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:
Con esto, ya tenemos todos los fundamentos para que puedas entender los ejemplos.
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;
}
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
)
3 Respuestas para "Indicadores de progreso en C"
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
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
Bueno, me alegra que les haya sido util… son esos apuntes que nunca están de más
Comentarios: