Je dirais qu'une bibliothèque comme ncurses serait habituée à de telles choses. curses aide à déplacer le curseur sur l'écran et à dessiner du texte, etc.
NCurses
Quelque chose comme ça :
std::stringstream out;
for (int i = 0; i< 10; i++)
{
out << "X";
cout << "\r" << "[" << out.str() << "]";
}
Le bit sournois est le caractère de retour chariot "\r" qui fait déplacer le curseur au début de la ligne sans descendre à la ligne suivante.
D'autres ont déjà souligné que vous pouvez utiliser \r
pour revenir au début de la ligne actuelle et écraser toute la ligne.
Une autre possibilité consiste à utiliser le caractère de retour arrière ("\b") pour effacer quelques espaces et ne remplacer que ces espaces. Cela peut avoir quelques avantages. Tout d'abord, cela évite évidemment d'avoir à tout régénérer dans la ligne, ce qui peut parfois être légèrement douloureux (même si c'est assez inhabituel). Deuxièmement, cela peut éviter d'avoir à afficher des données qui (par exemple) diminuent de taille au fur et à mesure que vous les écrivez -- par exemple, si vous affichez un compte à rebours de 100 à 0, avec \r
vous devez faire attention à ne pas écraser toute la longueur précédente, sinon votre compte à rebours passera (par exemple) de 100 à 990 (c'est-à-dire en laissant le "0" précédent intact).
Notez, cependant, que bien que l'espacement arrière dans une ligne fonctionne normalement, un espacement arrière au début d'une ligne peut ou non déplacer la position du curseur/écriture vers une ligne précédente. Dans la plupart des cas, vous ne pouvez vous déplacer que sur une seule ligne.
essayez d'utiliser \r
au lieu de \n
lors de l'impression de la nouvelle "version".
for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");