Cancella la console in C++

Jinku Hu 12 ottobre 2023
Cancella la console in C++

Questo articolo spiegherà diversi metodi su come cancellare la console in C++.

Usa codici di escape ANSI per cancellare la console

Non ci sono funzionalità del linguaggio C++ incorporate per manipolare la console e cancellare il testo di output. Tuttavia, i codici di escape ANSI possono essere un modo relativamente portatile per raggiungere questo obiettivo. I codici di escape sono sequenze di byte che iniziano con un carattere di escape ASCII e un carattere di parentesi seguiti da parametri. Questi caratteri possono essere inseriti nella stringa di output e la console li interpreta come comandi anziché come testo da visualizzare.

I codici ANSI includono più sequenze di output della console con funzionalità come lo spostamento del cursore su / giù, la cancellazione in linea, lo scorrimento e molte altre opzioni. Il seguente esempio di codice utilizza la sequenza Erase in Display che cancella l’intero schermo e non elimina il buffer di scorrimento all’indietro. Si noti che abbiamo costruito una funzione separata denominata clear per rendere il codice più flessibile e leggibile.

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

In alternativa, possiamo inserire la stessa sequenza di escape con una leggera modifica (sostituire 2 con 3) per cancellare l’intera schermata della console ed eliminare il buffer di scorrimento, come mostrato nel prossimo esempio di codice. Alcune utili sequenze di controllo ANSI sono descritte nella tabella seguente. Puoi anche fare riferimento a questa pagina di Wikipedia.

Codice Nome Effetto
CSI n A Cursore in alto Sposta il cursore del terminale verso l’alto di n celle. Il valore predefinito delle celle è 1. Se il cursore è già sul bordo, il comando sequenza non ha effetto.
CSI n B Cursore verso il basso Sposta il cursore del terminale verso il basso di n celle. Il valore predefinito delle celle è 1. Se il cursore è già sul bordo, questo comando di sequenza non ha effetto.
CSI n J Cancella nel display Cancella parte della finestra del terminale. Se n è 0 o non è specificato, il comando cancella dalla posizione corrente del cursore alla fine della finestra. Se n è 1, il comando scompare dalla posizione del cursore all’inizio della finestra. Il comando cancella l’intero schermo se n è 2. Se n è 3, il comando cancella l’intera finestra e cancella le righe nel buffer di scorrimento indietro.
CSI n K Cancella in linea Cancella la parte della linea. Se n è 0 o non è specificato, il comando cancella dal cursore alla fine della riga. Se n è 1, il comando cancella dal cursore all’inizio della riga. Se n è 2, l’intera riga viene cancellata.
#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;
}
Autore: 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