이번에는, 사용자로부터 키보드 입력값을 에코 없이 가져오는 방법에 대해서 설명드리겠습니다. 에코라는 것은, 사용자가 키보드 입력을 한 경우에, 콘솔창에 문자가 그대로 출력되는 것을 말합니다. 에코를 출력하는 대표적인 사용자 키보드 입력 함수는 scanf 가 있습니다. 즉, 사용자가 키보드 입력을 하면 콘솔에 출력하지 않고, 바로 그 입력값을 넘겨주는 예제에 대해서 알아보려고 합니다.


#include <stdio.h>
#include <conio.h>

enum{
	False, True
};

int main(int argc, char* argv[]){
	int ch;
	while (True){
		ch = _getch();
		if (ch == 'Q'){
			printf("프로그램 종료\n");
			break;
		}
		printf("입력된 키 값 (정수) : %d\n", ch);
	}
	return 0;
}


4 ~ 6 라인

참, 거짓을 표현하기 위한 열거형 상수를 정의합니다. 거짓은 False ( = 0 ), 참은 True ( = 1) 로 각각 표현합니다.


11 라인

_getch 함수를 호출하여 에코 없이 사용자 키보드 입력을 받아서, 문자 한 개의 정수 값을 ch 변수에 저장합니다. _getch 함수와 반대로 scanf 는 대표적인 에코를 출력하면서 사용자 키보드 입력을 받는 함수입니다. 


12 ~ 15 라인

입력 받은 문자가 대문자 Q 인 경우에 프로그램을 종료합니다.


16 라인

만약, 입력된 문자가 대문자 Q 가 아닌 경우에는, 입력 받은 키 값을 정수로 화면에 출력합니다. (기본적으로 아스키 코드 값) 단, 화살표 키 또는 기능 키 (CTRL, SHIFT, ALT) 를 포함한 문자를 읽을 때, 이 함수는 두 번 호출되어야 합니다. 예를 들어, 화살표 위 방향 키를 입력받으면, 첫 번째 _getch 함수의 반환 값으로 0xE0 (224) 가 반환되고 그 다음 _getch 함수의 반환 값으로 72 가 반환됩니다. 또한, CTRL + F1 을 입력하면, 첫 번째 _getch 함수의 반환 값으로 0 이 반환되고, 그 다음의 _getch 함수의 반환 값으로 94 가 반환되게 됩니다. 이 두 가지 경우를 제외하면, 모두 한 번만 _getch 함수의 반환 값을 읽으면 됩니다.  


[실행 결과 - 대문자 A 를 입력한 경우]


[실행 결과 - 스페이스 바를 입력한 경우]


[실행 결과 - 화살표 위 방향을 입력한 경우]


[실행 결과 - 대문자 Q 를 입력한 경우]




(_getch 함수 설명 참고)

https://msdn.microsoft.com/ko-kr/library/078sfkak.aspx

by kkikkodev 2015. 5. 17. 00:54