본문 바로가기
코딩

콘솔 텍스트에 색깔 입히기[C언어]

by RGStudio 2023. 11. 4.

여러분들 모두 코딩하다가 한 번씩은,

검은 배경에 흰 글씨가 마음에 안 들거나,

다른 색상의 글자를 원한 적이 있으실겁니다.

 

그래서 오늘은 콘솔 텍스트의 색상을 바꾸는 함수를 알아보고자 합니다!

 

SetConsoleTextAttribute(핸들 값, 색상정보);

라이브러리:windows.h

 

실행 버튼을 눌렀을 때 나오는 콘솔 창의 텍스트 색깔을 바꾸려면 함수의 첫 번째 인자에

GetStdHandle(STD_OUTPUT_HANDLE)를 넣어주면 됩니다.

 

두번째 인자에는 색상 정보를 숫자로 넣어주면 되는데,

이 함수에선 총 16가지의 색깔이 제공됩니다.

0.검정(black) 8.회색
1.파랑(blue) 9.연한파랑
2.초록(green) 10.연한초록
3.옥색(jade) 11.연한옥색
4.빨강(red) 12.연한빨강
5.보라(violet) 13.연한보라
6.노랑(yellow) 14.연한노랑
7.흰색(white) 15.진한하양

 

이 테이블은 알파벳 순서대로 색상을 정리해 놓았는데요,

보시다시피 0~7에선 기본색상, 여기서 8을 더하면 연한 색상이 나옵니다.

실제로 출력하면 이런 색상입니다!

 

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);

printf("Hello, World!");

를 하면 보라색 글씨로 Hello, World!가 출력되겠죠?

 

다음은 배경색인데요, 배경색도 위 표에서 제공된 16가지의 색깔을 사용할 수 있습니다.

다만 사용할 때는 색상에 16을 곱해줘야 합니다.

그래서 배경색, 글자색을 같이 변경하려면,

16*배경색상+글자색상 형식으로 넣어주면 됩니다.

총 256개의 경우의 수를 만들 수 있고, 16진수 표현과 거의 유사하다고도 볼 수 있습니다.

앞에 텍스트 색상만 바꿀 때 그냥 넣어주어도 검정 배경으로 나온 이유는 검정이 0번이라서 그런거죠!

 

그럼 이를 이용한 예시를 한번 볼까요?

#include<windows.h>
#include<stdio.h>
 
int main(){
	char data;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3/*옥색*/);
	printf("1.");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
	printf("수소는 자연에서 가장 가벼운 원소이다.(O/X)");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14/*연노랑색*/);
	printf("\n->");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
	scanf("%c", &data);
	if(data=='O'){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9/*연파랑색*/);
		printf("정답입니다!\n"); 
	}else{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12/*연빨강색*/);
		printf("오답입니다...\n"); 
	}
	getchar(); 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3/*옥색*/);
	printf("2.");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
	printf("우라늄은 자연에서 가장 무거운 원소이다.(O/X)");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14/*연노랑색*/);
	printf("\n->");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
	scanf("%c", &data);
	if(data=='O'){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9/*연파랑색*/);
		printf("정답입니다!\n"); 
	}else{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12/*연빨강색*/);
		printf("오답입니다...\n"); 
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7/*흰색*/);
	return 0;
}

간단한 퀴즈게임인데요, 매줄마다 색상을 계속 바꾸어보았습니다.

 

색깔만 바뀌었는데 이것보다 훨씬 예쁘게 잘 나왔죠?

 

 

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),16*배경색+글자색);

 

 

C언어로 코딩할 때 잘 이용해보시길 바랍니다!

'코딩' 카테고리의 다른 글

Topster 만들기(1)  (0) 2023.11.09
clion PS용으로 설정하기  (0) 2023.10.31
웹 개발을 위한 필수적인 프로그래밍 용어 정리!(1)  (0) 2023.10.29