GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So aktualisieren Sie eine gedruckte Nachricht im Terminal, ohne sie erneut zu drucken

Ich würde sagen, dass eine Bibliothek wie ncurses an solche Dinge gewöhnt wäre. Curses hilft dabei, den Cursor auf dem Bildschirm zu bewegen und Text und dergleichen zu zeichnen.

NCurses


Etwa so:

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

Das hinterhältige Bit ist das Carriage-Return-Zeichen "\r", das bewirkt, dass der Cursor zum Anfang der Zeile springt, ohne zur nächsten Zeile zu gehen.


Andere haben bereits darauf hingewiesen, dass Sie 01 verwenden können um zum Anfang der aktuellen Zeile zurückzukehren und die gesamte Zeile zu überschreiben.

Eine andere Möglichkeit besteht darin, das Backspace-Zeichen ("\b") zu verwenden, um einige Leerzeichen zu löschen und nur diese Leerzeichen zu überschreiben. Dies kann einige Vorteile haben. Erstens vermeidet es offensichtlich, dass alles in der Leitung regeneriert werden muss, was manchmal leicht schmerzhaft sein kann (obwohl das ziemlich ungewöhnlich ist). Zweitens kann es einige Probleme beim Anzeigen von Daten vermeiden, die (zum Beispiel) beim Schreiben schrumpfen – zum Beispiel, wenn Sie einen Countdown von 100 bis 0 mit 19 Sie müssen vorsichtig sein, nicht die gesamte vorherige Länge zu überschreiben, oder Ihr Countdown geht (zum Beispiel) von 100 auf 990 (d. h. die vorherige "0" bleibt intakt).

Beachten Sie jedoch, dass die Rücktaste innerhalb einer Zeile zwar normalerweise funktioniert, eine Rücktaste am Anfang einer Zeile den Cursor/die Schreibposition jedoch möglicherweise auf eine vorherige Zeile zurückbewegt oder nicht. Aus praktischen Gründen können Sie sich nur innerhalb einer einzigen Zeile bewegen.


versuchen Sie es mit 27 statt 30 beim Drucken der neuen "Version".

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

Linux
  1. Wie aktualisiere ich den Ralink 5390-Adaptertreiber über das Terminal?

  2. So aktualisieren Sie das FOG-Image

  3. So legen Sie Proxy-Einstellungen in der Linux-Befehlszeile oder im Terminal fest

  4. Wie lösche ich gedruckte Zeichen in einer Konsolenanwendung (Linux)?

  5. Wie sende ich über die Befehlszeile in Linux eine Nachricht an meinen socket.io-Websocket?

So verwenden Sie Instagram im Terminal

So zeigen Sie den Bash-Verlauf ohne Zeilennummern an

So deaktivieren Sie Anzeigen in der Begrüßungsnachricht des Terminals in Ubuntu Server

Wie erstelle ich ein Meldungsfeld von der Befehlszeile aus?

Wie kann man eine bestimmte Linie ziehen, ohne den Cursor in Vim zu bewegen?

Wie kann man stdin vom Terminal aus plotten?