Cómo limpiar la consola en C++

Jinku Hu 12 octubre 2023
Cómo limpiar la consola en C++

Este artículo explicará varios métodos de cómo limpiar la consola en C++.

Usar los códigos de escape ANSI para limpiar la consola

No hay características incorporadas en el lenguaje C++ para manipular la consola y borrar el texto de salida. Sin embargo, los códigos de escape ANSI pueden ser una forma relativamente portátil de lograr este objetivo. Los códigos de escape son secuencias de bytes que comienzan con un carácter de escape ASCII y un carácter de paréntesis seguido de parámetros. Estos caracteres pueden ser insertados en la cadena de salida, y la consola los interpreta como comandos en lugar de como texto a mostrar.

Los códigos ANSI incluyen múltiples secuencias de salida de la consola con características como mover el cursor hacia arriba/abajo, borrar en línea, desplazamiento y varias otras opciones. El siguiente ejemplo de código utiliza la secuencia Borrar en pantalla que borra toda la pantalla y no borra el buffer de desplazamiento. Note que hemos construido una función separada llamada clear para hacer el código más flexible y legible.

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

Alternativamente, podemos insertar la misma secuencia de escape con una ligera modificación (sustituya 2 por 3) para borrar toda la pantalla de la consola y eliminar el buffer de desplazamiento, como se muestra en el siguiente ejemplo de código. En la siguiente tabla se describen algunas secuencias de control ANSI útiles. También puede consultar esta página de Wikipedia.

Código Nombre Efecto
CSI n A Cursor arriba Mueve el cursor de la terminal hacia arriba por las celdas n. El valor por defecto de las celdas es 1. Si el cursor ya está en el borde, el comando de secuencia no tiene efecto.
CSI n B Cursor hacia abajo Mueve el cursor de la terminal hacia abajo por las celdas n. El valor por defecto de las celdas es 1. Si el cursor ya está en el borde, este comando de secuencia no tiene efecto.
CSI n J Borrar en la pantalla Despeja la parte de la ventana de la terminal. Si n es 0 o no se especifica, el comando borra desde la posición actual del cursor hasta el final de la ventana. Si n es 1, el comando borra desde la posición del cursor hasta el principio de la ventana. El comando borra toda la pantalla si n es 2. Si n es 3, el comando borra toda la ventana y borra las líneas en el buffer de desplazamiento hacia atrás.
CSI n K Borrado en línea Borra la parte de la línea. Si n es 0 o no se especifica, el comando borra desde el cursor hasta el final de la línea. Si n es 1, el comando borra desde el cursor hasta el principio de la línea. Si n es 2, se borra toda la línea.
#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