GNU/Linux >> Linux Esercitazione >  >> Linux

Come aggiornare un messaggio stampato nel terminale senza ristampare

Direi che una libreria come ncurses sarebbe usata per queste cose. curses aiuta a spostare il cursore sullo schermo e disegnare testo e simili.

NCurses


Qualcosa del genere:

std::stringstream out;
for (int i = 0; i< 10; i++)
{
  out << "X";
  cout << "\r" << "[" << out.str() << "]";
}

La parte subdola è il carattere di ritorno a capo "\r" che fa spostare il cursore all'inizio della riga senza passare alla riga successiva.


Altri hanno già sottolineato che puoi usare \r per tornare all'inizio della riga corrente e sovrascrivere l'intera riga.

Un'altra possibilità è usare il carattere backspace ("\b") per cancellare alcuni spazi e sovrascrivere solo quegli spazi. Questo può avere un paio di vantaggi. Innanzitutto, evita ovviamente di dover rigenerare tutto nella linea, il che a volte può essere leggermente doloroso (anche se è abbastanza insolito). In secondo luogo, può evitare un po' di problemi nel visualizzare dati che (per esempio) si riducono di dimensione mentre li scrivi -- per esempio, se stai visualizzando un conto alla rovescia da 100 a 0, con \r devi stare attento a non sovrascrivere l'intera lunghezza precedente, altrimenti il ​​conto alla rovescia passerà da (ad esempio) 100 a 990 (ovvero, lasciando intatto lo "0" precedente).

Si noti, tuttavia, che mentre il backspace all'interno di una riga funziona normalmente, un backspace all'inizio di una riga può o meno spostare il cursore/la posizione di scrittura indietro su una riga precedente. Per scopi più pratici, puoi spostarti solo all'interno di una singola riga.


prova a usare \r invece di \n durante la stampa della nuova "versione".

for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");

Linux
  1. Come aggiornare il driver dell'adattatore Ralink 5390 tramite terminale?

  2. Come aggiornare l'immagine FOG

  3. Come impostare le impostazioni proxy sulla riga di comando di Linux o sul terminale

  4. Come aggiornare i software Ubuntu Linux utilizzando la riga di comando

  5. Come posso inviare un messaggio al mio socket.io websocket dalla riga di comando in Linux?

Come utilizzare Instagram nel terminale

Come visualizzare la cronologia di Bash senza numeri di riga

Come disabilitare gli annunci nel messaggio di benvenuto del terminale nel server Ubuntu

Come creare una finestra di messaggio dalla riga di comando?

Come tracciare una linea particolare senza spostare il cursore in Vim?

come tracciare stdin dal terminale?