GNU/Linux >> Tutoriels Linux >  >> Linux

Comment mettre à jour un message imprimé dans le terminal sans réimprimer

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");

Linux
  1. Comment mettre à jour l'image FOG

  2. Comment définir les paramètres proxy sur la ligne de commande ou le terminal Linux

  3. Comment ouvrir un nouvel onglet dans le terminal GNOME à partir de la ligne de commande ?

  4. Comment imprimer un message sur stderr dans Go ?

  5. Comment envoyer un message à mon websocket socket.io à partir de la ligne de commande sous Linux ?

Comment utiliser Instagram dans le terminal

Comment afficher l'historique de Bash sans numéros de ligne

Comment désactiver les publicités dans le message de bienvenue du terminal dans le serveur Ubuntu

Comment créer une boîte de message à partir de la ligne de commande ?

Comment tirer une ligne particulière sans déplacer le curseur dans Vim ?

comment tracer stdin depuis le terminal?