C++에서 콘솔을 지우는 방법

Jinku Hu 2023년10월12일
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;
}
작가: 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