[C++] 키보드 입력 (getch, kbhit) 함수

chooha·2025년 1월 22일

C++

목록 보기
7/23

1. _getch()

▸ 기능

  • <conio.h> 헤더에 포함되어 있음
  • 입력된 키의 정보를 얻어옴 (ASCII 코드로 들어옴)
  • 아스키코드로 표현할 수 없는 펑션키(F1, F2, F3, F4)나 방향키(←, →, ↑, ↓)의 경우 다른 키와의 구분을 위해 두 개의 값을 반환
    - 펑션키 : 먼저 0을 반환하고 그 다음에 F1(59), F2(60)과 같은 숫자를 반환
    - 방향키 : 먼저 224를 반환하고 그 다음에 ←(75), →(77), ↑(72), ↓(80)의 숫자를 반환

💡 C언어의 scanf, C++의 cin과 다른점
scanf와 cin은 입력 시 버퍼를 사용하기 때문에 키 입력 후에 엔터키를 눌러야 입력이 마무리되지만, getch는 입력 버퍼를 사용하지 않기 때문에 키를 누름과 동시에 값이 입력됨
➕ SPACE나 ENTER와 같은 특수 키도 입력이 가능함

▸ 단점

  • 마지막에 누른 키 하나만 입력받음
    ∴ 두 개 이상의 키를 한번에 입력받지 못하여 반응속도가 늦음
    또한, 방향키도 두 개 이상 입력받지 못해 게임이라면 '대각선 이동'을 못함
    GetAsyncKeyState()함수를 이용하면 멀티 입력 가능

2. _kbhit()

▸ 기능

  • 현재 키보드가 입력된 상태인지를 조사함
  • getch()는 어떤 키가 눌리기 전까지는 무한 대기 상태로 돌입 (키가 눌리기 전까진 모든게 멈춤)
    but. kbhit()는 키의 입력이 발생할 때까지 원래 하던걸 하면서 계속 조사만 함
  • 키 입력값이 있으면 true, 없으면 false 반환

3. 사용법

#include <iostream>
#include <conio.h>

int main()
{
	char c = _getch();
    cout << c; // d 키를 누르면 'd'가 출력되고, 만약 int로 받았다면 100 출력
    
	return 0;
}
  • 한글 입력받는 방법
#include <conio.h>
#include <iostream>


int main()
{
	while(1)
	{
		std::string str = "";
		char c = _getch();
		str.push_back(c);
		std::cout << str << "\n";

		if (c == '-')
		{
			break;
		}

		if (_kbhit())
		{
			str.push_back(_getch());
		}

		std::cout << str << "\n";
		str = "";
	}

	return 0;
}

한글과 한자, 확장키는 모두 2byte를 차지하므로, getch함수를 한번더 받아줌


< 체크 포인트 >

➕ 아스키 코드표


< 참고 자료 >

getch, kbhit 함수
kbhit 함수
getch 한글 입력

0개의 댓글