C 언어에서 kbhit() 함수를 사용하면 키보드 입력이 발생했는지 실시간으로 확인할 수 있습니다. kbhit은 'Keyboard Hit(키보드 히트)'의 약자로, 이름 그대로 키가 눌렸는지를 감지하는 기능을 수행합니다.
이 함수는 conio.h 헤더 파일에 선언되어 있으므로, 사용하려면 반드시 해당 헤더 파일을 소스 코드에 포함해야 합니다.
kbhit() 함수의 동작 원리
kbhit() 함수의 동작 방식은 매우 간단합니다.
- 키가 눌린 경우: 0이 아닌 값(nonzero)을 반환합니다.
- 키가 눌리지 않은 경우: 0을 반환합니다.
이러한 특성 덕분에 프로그램을 멈추지 않고도 키 입력 여부를 확인할 수 있어, 게임 루프나 실시간 입력 처리 등에 유용하게 활용됩니다.
kbhit() 활용 예제
아래 예제는 무한 루프 안에서 키 입력을 계속 확인하고, ESC 키(ASCII 코드 27)가 눌리면 프로그램을 종료하는 코드입니다.
#include <stdio.h>
#include <conio.h>
int main() {
char ch;
printf("Enter keys (ESC to exit)\n");
while (1) { // 키 입력을 받기 위한 무한 루프
if (kbhit()) { // 키가 눌렸는지 확인
ch = getch(); // 입력된 문자를 ch에 저장
if ((int)ch == 27) // ESC 키가 눌리면 루프 탈출
break;
printf("You have entered : %c\n", ch);
}
}
return 0;
}실행 결과
Enter keys (ESC to exit) You have entered : i You have entered : t You have entered : D You have entered : w You have entered : 5 You have entered : / You have entered : * You have entered : + You have entered : You have entered : o You have entered : You have entered : &
주의 사항
kbhit() 함수는 C 표준 라이브러리에 포함되어 있지 않습니다. 이 함수는 DOS 및 Windows 환경의 conio.h에서만 제공되므로, Linux나 macOS 같은 다른 운영체제에서는 동작하지 않거나 별도의 구현이 필요합니다.
따라서 이식성(portability)이 중요한 코드라면 kbhit() 사용을 피하고, 운영체제별로 제공되는 대체 API(예: POSIX의 termios, Windows의 _kbhit 등)를 활용하거나 조건부 컴파일로 처리하는 것이 좋습니다.