So löschen Sie die Konsole in C++

Jinku Hu 12 Oktober 2023
So löschen Sie die Konsole in C++

In diesem Artikel werden mehrere Methoden zum Löschen der Konsole in C++ erläutert.

Verwenden von ANSI-Escape-Codes zum Löschen der Konsole

Es gibt keine eingebauten C++-Sprachfunktionen zur Manipulation der Konsole und zum Löschen des Ausgabetextes. ANSI-Escape-Codes können jedoch eine relativ portable Möglichkeit sein, dieses Ziel zu erreichen. Escape-Codes sind Bytefolgen, die mit einem ASCII-Escape-Zeichen und einem Klammerzeichen beginnen, gefolgt von Parametern. Diese Zeichen können in die AusgabeZeichenkette eingefügt werden, und die Konsole interpretiert sie als Befehle und nicht als anzuzeigenden Text.

ANSI-Codes umfassen mehrere Konsolenausgabesequenzen mit Funktionen wie Bewegen des Cursors nach oben/unten, Löschen in der Zeile, Scrollen und verschiedene andere Optionen. Das folgende Code-Beispiel verwendet die Sequenz Erase in Display, die den gesamten Bildschirm löscht und den Rücklaufpuffer nicht löscht. Beachten Sie, dass wir eine separate Funktion namens clear konstruiert haben, um den Code flexibler und lesbarer zu machen.

#include <iostream>

using std::cout;
using std::endl;

void Clear() { cout << "\x1B[2J\x1B[H"; }

int main() {
  cout << "Some console filling text ..." << endl;
  cout << "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
       << endl;
  Clear();

  return EXIT_SUCCESS;
}

Alternativ können wir die gleiche Escape-Sequenz mit einer leichten Modifikation einfügen (ersetzen Sie 2 durch 3), um den gesamten Konsolenbildschirm zu löschen und den Rücklaufpuffer zu löschen, wie im nächsten Codebeispiel gezeigt. Einige nützliche ANSI-Steuersequenzen sind in der folgenden Tabelle beschrieben. Sie könnten auch auf diese Wikipedia-Seite verweisen.

Code Name Wirkung
CSI n A Cursor nach oben Bewegen Sie den Terminal-Cursor um n Zellen nach oben. Der Standardwert der Zellen ist 1. Wenn sich der Cursor bereits am Rand befindet, hat der Sequenzbefehl keine Wirkung.
CSI n B Cursor nach unten Bewegen Sie den Terminal-Cursor um n Zellen nach unten. Der Standardwert von Zellen ist 1. Wenn sich der Cursor bereits am Rand befindet, hat dieser Sequenzbefehl keine Wirkung.
CSI n J Löschen in der Anzeige Einen Teil des Terminalfensters löschen. Wenn n 0 ist oder nicht angegeben wird, löscht der Befehl von der aktuellen Position des Cursors bis zum Ende des Fensters. Wenn n gleich 1 ist, löscht der Befehl von der aktuellen Position des Cursors bis zum Anfang des Fensters. Der Befehl löscht den gesamten Bildschirm, wenn n zwei ganze Bildschirme sind. Wenn n gleich 3 ist, löscht der Befehl das gesamte Fenster und löscht Zeilen im Rücklaufpuffer.
CSI n K Zeilenweise löschen Löschen Sie den Teil der Zeile. Wenn n 0 oder nicht angegeben ist, löscht der Befehl vom Cursor bis zum Ende der Zeile. Wenn n gleich 1 ist, löscht der Befehl vom Cursor bis zum Anfang der Zeile. Ist n gleich 2, wird die gesamte Zeile gelöscht.
#include <iostream>

using std::cout;
using std::endl;

void ClearScrollback() { cout << "\x1B[3J\x1B[H"; }

int main() {
  cout << "Some console filling text ..." << endl;
  cout << "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
          "Another filler string for the stdout\n"
       << endl;
  ClearScrollback();

  return EXIT_SUCCESS;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook