Comment vider la console en C++

Jinku Hu 12 octobre 2023
Comment vider la console en C++

Cet article expliquera plusieurs méthodes pour effacer la console en C++.

Utiliser les codes d’échappement ANSI pour effacer la console

Il n’y a pas de fonctions intégrées en langage C++ pour manipuler la console et effacer le texte de sortie. Cependant, les codes d’échappement ANSI peuvent être un moyen relativement portable d’atteindre cet objectif. Les codes d’échappement sont des séquences d’octets commençant par un caractère d’échappement ASCII et un caractère de parenthèse suivis de paramètres. Ces caractères peuvent être insérés dans la chaîne de sortie, et la console les interprète comme des commandes plutôt que comme du texte à afficher.

Les codes ANSI comprennent plusieurs séquences de sortie de la console avec des fonctions telles que le déplacement du curseur vers le haut/bas, l’effacement en ligne, le défilement et plusieurs autres options. L’exemple de code suivant utilise la séquence Erase in Display qui efface tout l’écran et ne supprime pas le tampon de défilement. Notez que nous avons construit une fonction séparée appelée “clear” pour rendre le code plus flexible et plus lisible.

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

Nous pouvons également insérer la même séquence d’échappement avec une légère modification (remplacer 2 par 3) pour effacer tout l’écran de la console et supprimer le tampon de défilement, comme le montre l’exemple de code suivant. Quelques séquences de contrôle ANSI utiles sont décrites dans le tableau suivant. Vous pouvez également consulter cette page Wikipedia.

Code Nom Effet
CSI n A Curseur en haut Déplacez le curseur du terminal vers le haut par n cellules. La valeur par défaut des cellules est 1. Si le curseur est déjà au bord, la commande de séquence n’a aucun effet.
CSI n B Curseur en bas Déplacez le curseur du terminal vers le bas par n cellules. La valeur par défaut des cellules est 1. Si le curseur est déjà au bord, cette commande de séquence n’a aucun effet.
CSI n J Effacer dans l’affichage Dégagez une partie de la fenêtre du terminal. Si n est 0 ou non spécifié, la commande efface de la position actuelle du curseur jusqu’à la fin de la fenêtre. Si n est égal à 1, la commande efface la position du curseur jusqu’au début de la fenêtre. Si n est égal à 2, la commande efface tout l’écran ; si n est égal à 3, la commande efface toute la fenêtre et supprime les lignes dans la mémoire tampon de défilement.
CSI n K Effacer en ligne Effacez la partie de la ligne. Si n est 0 ou non spécifié, la commande efface du curseur jusqu’à la fin de la ligne. Si n est égal à 1, la commande efface du curseur jusqu’au début de la ligne. Si n est égal à 2, la ligne entière est effacée.
#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;
}
Auteur: 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