리눅스에서 키보드 입력을 즉각즉각 수신해보자

Windows 환경에서는 #include <conio.h>를 하여 _getch()_kbhit()을 바로 활용할 수 있는데,
리눅스 환경에서는 불가능하다 ㅠㅠ ! 그래도 방법은 있으니 걱정 노노

개요

std::cin이나 getline을 사용할 때 엔터키를 반드시 눌러줘야 입력으로 받을 수 있다
하지만 게임에서 캐릭터 방향키처럼 누름과 동시에 값을 받도록 할 수가 있는데 방법을 한번 알아보자

1. 헤더파일 및 함수 정의

리눅스 환경에서 키보드 입력을 받기 위해 아래 헤더 파일 및 함수를 하나 정의해주자

#include <stdio.h>
#include <termio.h>
int getch(void)
{
  int ch;
  struct termios buf, save;
  tcgetattr(0,&save);
  buf = save;
  buf.c_lflag &= ~(ICANON|ECHO);
  buf.c_cc[VMIN] = 1;
  buf.c_cc[VTIME] = 0;
  tcsetattr(0, TCSAFLUSH, &buf);
  ch = getchar();
  tcsetattr(0, TCSAFLUSH, &save);
  return ch;
}

2. main 문에서 잘 쓰기

int main()
{
  int input;

  while (1)
  {
    input = getch();
    std::cout << input << std::endl;
  }

  return 0;
}

Leave a comment