Limpar a Consola em C++
Este artigo irá explicar vários métodos de como limpar a consola em C++.
Utilizar os Códigos de Fuga ANSI para Limpar Consola
Não há características de linguagem C++ integradas para manipular a consola e limpar o texto de saída. No entanto, os códigos de fuga ANSI podem ser uma forma relativamente portátil de alcançar este objectivo. Os códigos de escape são sequências de bytes que começam com um carácter de escape ASCII e um carácter de parêntesis seguido de parâmetros. Estes caracteres podem ser inseridos na string de saída, e a consola interpreta-os como comandos em vez de texto a exibir.
Os códigos ANSI incluem múltiplas sequências de saída da consola com características como mover o cursor para cima/baixo, apagar em linha, rolar, e várias outras opções. O exemplo de código seguinte utiliza a sequência Erase in Display
que limpa todo o ecrã e não elimina o buffer de scrollback. Note que construímos uma função separada chamada clear
para tornar o código mais flexível e legível.
#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;
}
Em alternativa, podemos inserir a mesma sequência de fuga com uma ligeira modificação (substituir 2 por 3) para limpar todo o ecrã da consola e apagar o buffer de retrocesso, como se mostra na próxima amostra de código. Algumas sequências de controlo ANSI úteis são descritas na tabela seguinte. Pode também consultar esta página da Wikipedia.
Código | Nome | Efeito |
---|---|---|
CSI n A |
Cursor Up | Mover o cursor do terminal para cima por células n . O valor por defeito das células é 1. Se o cursor já estiver na borda, o comando de sequência não tem efeito. |
CSI n B |
Cursor Down | Mover o cursor do terminal para baixo por células n . O valor por defeito das células é 1. Se o cursor já estiver na borda, este comando de sequência não tem efeito. |
CSI n J |
Apagar em exposição | Limpar parte da janela terminal. Se n for 0 ou não especificado, o comando limpa desde a posição actual do cursor até ao fim da janela. Se n for 1, o comando limpa da posição actual do cursor para o início da janela. O comando limpa todo o ecrã se o n for 2. Se o n for 3, o comando limpa toda a janela e apaga as linhas no buffer scroll-back. |
CSI n K |
Apagar em linha | Apagar a parte da linha. Se n for 0 ou não especificado, o comando apaga do cursor até ao fim da linha. Se n for 1, o comando apaga do cursor para o início da linha. Se n for 2, a linha inteira é apagada. |
#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