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;
}
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