Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 kbhit() 함수 완벽 정리: 키보드 입력 감지 방법

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 등)를 활용하거나 조건부 컴파일로 처리하는 것이 좋습니다.