2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/텍스트기반SW

코드블럭 printf() 색상 바꾸기...

원당컴퓨터학원 2017. 7. 26. 18:19

호기심 많은 학생이 질문합니다.


"쌤~~~ printf() 문으로 출력할때 색상을 변경 할 수 있나요?"


'헉~~ 이런건 해 본적이 없는데~~'


부랴부랴 인터넷 검색을 해 보았습니다.


printf("%c[31m",27); 


을 입력 하면 콘솔에서 화면 색깔을 바꾸어 준다고 나오네요...


얼른 학생에게 이렇게 하면 되는거야 라고 대답해 주고 나서...


코드블럭에서 테스트를 해 봅니다.

아무리 바꾸어도 안됩니다...


다시 검색을 해 보니 리눅스에서 콘솔 특성을 이용해서

ESC[색상코드m (ESC 의 ASCII값이 27) 을 입력하면 화면 콘솔의 색상을 바꿔 주는 것이었습니다.


따라서 우리가 이용하는 윈도우 환경에서는 아무리 해 봐도 안되더라구요...


그래서 다시 한번 검색을 했습니다.



#include <stdio.h> 

#include <windows.h>


void SetColor(int ForgC)

{

   WORD wColor;


  HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);  //표준출력 화면의 핸들을 가져온다.

  CONSOLE_SCREEN_BUFFER_INFO csbi;                             //화면의 정보를 담을 버퍼 변수 선언 


 //화면의 속성값을 바꾼다.

 if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) //표준출력 화면의 핸들을 csbi 변수로 받아옴

 {

      //색상값을 들어온 데이터를 이용해 변경

      wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);

      SetConsoleTextAttribute(hStdOut, wColor); //표준출력 속성을 변경

 }

 return;

}


int main()

{

   SetColor(1);

   printf("테스트");

}




이렇게 함수를 만들어 사용하면 되네요.


색상은 다음과 같습니다.


0 = Black
1 = Blue
2 = Green
3 = Aqua
4 = Red
5 = Purple
6 = Yellow
7 = White
8 = Gray
9 = Light Blue
A = Light Green
B = Light Aqua
C = Light Red
D = Light Purple
E = Light Yellow
F = Bright White


위에서 사용한 SetConsoleTextAttribute(hStdOut, wColor);   


이 문장을 다음과 같이 메인에서 직접 사용할 수도 있습니다.



GetSdtHandle 을 통해서 표준출력 핸들을 받아 온 후 바로 Color 을 변경하면서 설정이 가능합니다.


그런데 이것보다도 더 간단한 방법이 있더군요...


 

 system("COLOR FA");



system 에 COLOR 를 변경하는데 FA 에서 앞의 F는 바탕색을 흰배경으로 A는 글자 색을 초록으로 변경한다는 명령입니다.


DOS 창을 띄우고 COLOR FA 치면 커맨드 창의 배경색이 바뀌는 것을 이용하는 것입니다.


여기에서 system 은 어떤 프로그램을 실행 시킬때 사용하는 함수로 stdlib.h 에 선언 되어 있습니다.



여기서 두가지 차이점은

system 을 이용한 Color 는 전체 화면의 모든 텍스트를 동시에 바꾸는 것이구요.


SetConsoleTextAttribute(hStdOut, wColor); 

이것은 해당 텍스트 이후의 색상을 변경할수 있다는 장점이 있습니다.


혹시라도 C언어 공부하시는 분들이 한번쯤 테스트 해 보면서 텍스트 기반의 프로그램에서도 색상을 바꿔 볼수가 있을것 같네요.^^






사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기