Diría que una biblioteca como ncurses estaría acostumbrada a tales cosas. curses ayuda a mover el cursor por la pantalla y dibujar texto y demás.
NMaldición
Algo como esto:
std::stringstream out;
for (int i = 0; i< 10; i++)
{
out << "X";
cout << "\r" << "[" << out.str() << "]";
}
El bit disimulado es el carácter de retorno de carro "\r" que hace que el cursor se mueva al comienzo de la línea sin pasar a la línea siguiente.
Otros ya han señalado que puedes usar \r
para volver al principio de la línea actual y sobrescribir toda la línea.
Otra posibilidad es usar el carácter de retroceso ("\b") para borrar algunos espacios y sobrescribir solo esos espacios. Esto puede tener un par de ventajas. Primero, obviamente evita tener que regenerar todo en la línea, lo que a veces puede ser ligeramente doloroso (aunque eso es bastante inusual). En segundo lugar, puede evitar algunos problemas al mostrar datos que (por ejemplo) se reducen de tamaño a medida que los escribe, por ejemplo, si está mostrando una cuenta regresiva de 100 a 0, con \r
debe tener cuidado de no sobrescribir toda la longitud anterior, o su cuenta regresiva pasará de (por ejemplo) 100 a 990 (es decir, dejando intacto el "0" anterior).
Tenga en cuenta, sin embargo, que si bien el retroceso dentro de una línea normalmente funciona, un retroceso al comienzo de una línea puede o no mover el cursor/posición de escritura a una línea anterior. Para la mayoría de los propósitos prácticos, solo puede moverse dentro de una sola línea.
intenta usar \r
en lugar de \n
al imprimir la nueva "versión".
for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");