C ++로 콘솔의 텍스트 색상 지정


98

C ++로 콘솔에 컬러 텍스트를 어떻게 쓸 수 있습니까? 즉, 다른 색상으로 다른 텍스트를 어떻게 쓸 수 있습니까?


C ++ 콘솔에서 다른 색상 을 찾을 수있는 리소스가
없었지만

2
C ++ 콘솔은 무엇입니까 ??
Edward Strange


이 답변에주의하십시오. 직접 되 돌리지 않으면 프로그램이 종료 된 후 본체에 변경 사항이 적용됩니다.
kayleeFrye_onDeck

답변:


122

콘솔 텍스트에 약간의 색상 추가

  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  // you can loop k higher to see more color choices
  for(int k = 1; k < 255; k++)
  {
    // pick the colorattribute k you want
    SetConsoleTextAttribute(hConsole, k);
    cout << k << " I want to be nice today!" << endl;
  }

대체 텍스트

문자 속성 "k"값을 해석하는 방법은 다음과 같습니다.


41
이것은 Windows 전용입니다.
DarkDust

2
한 줄에 여러 색상을 추가하려면 어떻게해야합니까?.
Fadwa

3
@Misaki 나는 테스트하지 않았지만 'endl'비트를 제거해 볼 수 있습니까?
Sheen

3
HANDLE 클래스를 알기 위해 어떤 라이브러리를 포함해야합니까?
STF

2
@STF는 사용 <WINDOWS.H>

36

ANSI 이스케이프 색상 코드 :

Name            FG  BG
Black           30  40
Red             31  41
Green           32  42
Yellow          33  43
Blue            34  44
Magenta         35  45
Cyan            36  46
White           37  47
Bright Black    90  100
Bright Red      91  101
Bright Green    92  102
Bright Yellow   93  103
Bright Blue     94  104
Bright Magenta  95  105
Bright Cyan     96  106
Bright White    97  107

C / C ++ 용 샘플 코드 :

#include <iostream>
#include <string>

int main(int argc, char ** argv){
    
    printf("\n");
    printf("\x1B[31mTexting\033[0m\t\t");
    printf("\x1B[32mTexting\033[0m\t\t");
    printf("\x1B[33mTexting\033[0m\t\t");
    printf("\x1B[34mTexting\033[0m\t\t");
    printf("\x1B[35mTexting\033[0m\n");
    
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[36mTexting\033[0m\t\t");
    printf("\x1B[37mTexting\033[0m\t\t");
    printf("\x1B[93mTexting\033[0m\n");
    
    printf("\033[3;42;30mTexting\033[0m\t\t");
    printf("\033[3;43;30mTexting\033[0m\t\t");
    printf("\033[3;44;30mTexting\033[0m\t\t");
    printf("\033[3;104;30mTexting\033[0m\t\t");
    printf("\033[3;100;30mTexting\033[0m\n");

    printf("\033[3;47;35mTexting\033[0m\t\t");
    printf("\033[2;47;35mTexting\033[0m\t\t");
    printf("\033[1;47;35mTexting\033[0m\t\t");
    printf("\t\t");
    printf("\n");

    return 0;
}

GCC :

g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi

3
@Mehdi Mohammadpour 저는 Windows 10을 사용하고 있으며 귀하의 이스케이프 코드 저를 위해 작동하고 있지만 Foreground 및 Background 코드가 반전 된 것으로 보입니다. 제목 'FG'와 'BG'를 뒤집어 주시겠습니까?
yamex5 19

@ yamex5
smoothware

안녕하세요 yamex5 및 smoothware, 감사합니다. 확인
Mehdi Mohammadpour

23

표준 C ++에는 '색상'이라는 개념이 없습니다. 그래서 당신이 묻는 것은 운영 체제에 따라 다릅니다.

Windows의 경우 SetConsoleTextAttribute 함수를 확인할 수 있습니다 .

* nix에서는 ANSI 이스케이프 시퀀스 를 사용해야합니다 .


3
ASNI 시퀀스 (또는 적어도 일부)는 Windows의 CMD.EXE에서도 작동합니다.
기금 모니카의 소송은

3
@Asu, 그들은 Win10 Anniversary Edition 이전에는 없습니다. Win10이 최신 버전이면 가지고있는 것입니다.
kayleeFrye_onDeck

7

메소드를 작성하고 다음과 같이 호출 할 수 있습니다.


HANDLE  hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;

// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white  
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236

FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);

cout << "Color Text";

SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text

2
그 주 SetConsoleTextAttribute(hConsole, 15);에 세트 색상 순백색 ,하지에 화이트 . 7-흰색. 15-Bright White
GooDeeJaY

5

Windows 10에서는 다음과 같이 이스케이프 시퀀스를 사용할 수 있습니다.

#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;

4

Windows 콘솔 창에 대해 이야기하고 있다고 가정하고 MSDN Library 설명서에서 콘솔 기능을 찾아보십시오.

그렇지 않으면 또는 더 일반적으로 콘솔에 따라 다릅니다. 색상은 C ++ 라이브러리에서 지원되지 않습니다. 그러나 콘솔 처리를위한 라이브러리는 색상을 지원할 수 있습니다. 예 : Google "ncurses colors".

연결된 직렬 터미널 및 터미널 에뮬레이터의 경우 "이스케이프 시퀀스"를 출력하여 제어 할 수 있습니다. 일반적으로 ASCII 27 (ASCII의 이스케이프 문자)로 시작합니다. ANSI 표준과 많은 사용자 지정 체계가 있습니다.


이 답변이 작성된 이후 Windows 10은 좁은 콘솔 스트림에 대한 ANSI 이스케이프 시퀀스를 지원했습니다.
건배와 hth. - 알프

3

할 수있는 가장 간단한 방법은 다음과 같습니다.

#include <stdlib.h>

system("Color F3");

여기서 "F"는 배경색에 대한 코드이고 3은 텍스트 색상에 대한 코드입니다.

다른 색상 조합을 보려면 주변을 엉망으로 만드십시오.

system("Color 1A");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 3B");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 4c");
std::cout << "Hello, what is your name?" << std::endl;

참고 : Windows에서만 테스트했습니다. 공장.


3
이것은 잘못된 접근입니다! 코드는 크로스 플랫폼이 아니며 Linux 시스템에서 작동하지 않습니다
GooDeeJaY

2

정말 뭘하고 싶은지 모르겠지만 C ++ 프로그램이 콘솔에 컬러 텍스트를 출력하기를 원한다고 생각합니다. 맞죠? Windows에 대해서는 모르지만 모든 Unices (Mac OS X 포함)에서는 ANSI 이스케이프 시퀀스 를 사용하기 만하면됩니다 .


2

Windows에서는 전경 (텍스트)과 배경에 빨간색 녹색과 파란색의 조합을 사용할 수 있습니다.

/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;

출처 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes


1

라이브러리를 사용할 필요가 없습니다. 단지 system ( "color 4f");


3
이것은 윈도우 전용이며 IIRC는 전체 화면을 하나의 색상으로
만듭니다

0

전체 화면을 색상으로 채우지 않으려면 "system ("Color… ")"을 사용하지 마십시오. 다음은 컬러 텍스트를 만드는 데 필요한 스크립트입니다.

#include <iostream>
#include <windows.h>

int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};

HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD   index = 0;


    SetConsoleTextAttribute(hstdout, colors[index]);
    std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.