C++에서 콘솔을 지우는 방법
이 기사에서는 C++에서 콘솔을 지우는 방법에 대한 몇 가지 방법을 설명합니다.
ANSI 이스케이프 코드를 사용하여 콘솔 지우기
콘솔을 조작하고 출력 텍스트를 지우는 내장 C++ 언어 기능이 없습니다. 그러나 ANSI 이스케이프 코드는이 목표를 달성하기위한 비교적 이식 가능한 방법이 될 수 있습니다. 이스케이프 코드는 ASCII 이스케이프 문자와 대괄호 문자로 시작하는 바이트 시퀀스이며 그 뒤에 매개 변수가 있습니다. 이러한 문자는 출력 문자열에 삽입 될 수 있으며 콘솔은 표시 할 텍스트가 아닌 명령으로 해석합니다.
ANSI 코드에는 커서를 위/아래로 이동, 줄에서 지우기, 스크롤 및 기타 여러 옵션과 같은 기능이있는 여러 콘솔 출력 시퀀스가 포함됩니다. 다음 코드 예제에서는 전체 화면을 지우고 스크롤 백 버퍼를 삭제하지 않는Erase in Display
시퀀스를 사용합니다. 코드를보다 유연하고 읽기 쉽게 만들기 위해 clear
라는 별도의 함수를 구성했습니다.
#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;
}
또는 다음 코드 샘플과 같이 전체 콘솔 화면을 지우고 스크롤 백 버퍼를 삭제하기 위해 약간의 수정 (2를 3으로 대체)으로 동일한 이스케이프 시퀀스를 삽입 할 수 있습니다. 몇 가지 유용한 ANSI 제어 시퀀스가 다음 표에 설명되어 있습니다. 이 위키피디아 페이지를 참조 할 수도 있습니다.
암호 | 이름 | 효과 |
---|---|---|
CSI n A |
커서 위로 | 터미널 커서를n 셀 위로 이동합니다. 셀의 기본값은 1입니다. 커서가 이미 가장자리에 있으면 시퀀스 명령이 적용되지 않습니다. |
CSI n B |
커서 아래로 | 터미널 커서를n 셀 아래로 이동합니다. 셀의 기본값은 1입니다. 커서가 이미 가장자리에있는 경우이 시퀀스 명령은 효과가 없습니다. |
CSI n J |
디스플레이에서 지우기 | 터미널 창의 일부를 지 웁니다. n 이 0이거나 지정되지 않은 경우 명령은 커서의 현재 위치에서 창 끝까지 지 웁니다. n 이 1이면 명령이 커서 위치에서 창 시작 부분까지 지워집니다. n 이 2이면이 명령은 전체 화면을 지 웁니다.n 이 3이면 명령은 전체 창을 지우고 스크롤 백 버퍼의 줄을 삭제합니다. |
CSI n K |
줄에서 지우기 | 선의 일부를 지 웁니다. n 이 0이거나 지정되지 않은 경우 명령은 커서에서 줄 끝까지 지워집니다. n 이 1이면 명령은 커서에서 줄의 시작 부분까지 지 웁니다. n이 2이면 전체 행이 지워집니다. |
#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