본문 바로가기
프로그래밍/C언어

C 언어에서 ncurses 사용하기: 키보드 입력 처리 및 방향키 인식

by Noritorgigi 2025. 6. 12.
728x90

1. 개요

첫 번째 글에서 ncurses 설치와 기본 출력 방법을 살펴봤습니다. 이번 글에서는 사용자 입력을 받는 법, 특히 방향키 같은 특수 키를 인식하는 방법을 집중적으로 다루겠습니다. 터미널 UI 개발에서 입력 처리는 필수 기능이므로 기본부터 차근차근 이해해 보겠습니다.

728x90

 

2. 키 입력 받기: getch() 함수

  • getch()는 키보드 입력을 한 글자씩 받는 함수입니다.
  • 기본적으로 입력 후 엔터를 누를 때까지 버퍼에 쌓이지만, cbreak() 모드를 사용하면 즉시 입력을 받을 수 있습니다.
  • 또한, noecho()를 호출하면 입력한 키가 화면에 표시되지 않습니다.

3. 특수키 인식: 방향키 등

  • 방향키 같은 특수키는 일반 문자와 다르게 여러 바이트 시퀀스로 처리됩니다.
  • keypad(stdscr, TRUE) 함수를 호출하면 getch()가 특수키 코드를 반환하도록 설정할 수 있습니다.
  • 주요 특수키 상수는 <ncurses.h>에 정의되어 있으며, 대표적으로 다음이 있습니다.
상수값
KEY_UP 위쪽 방향키
KEY_DOWN 아래쪽 방향키
KEY_LEFT 왼쪽 방향키
KEY_RIGHT 오른쪽 방향키
KEY_ENTER 엔터 키

4. 입력 처리 예제

#include <ncurses.h>

int main() {
    int ch;

    initscr();          // ncurses 시작
    cbreak();           // 라인버퍼링 없이 입력받기
    noecho();           // 입력 문자 화면에 표시 안 함
    keypad(stdscr, TRUE); // 특수키 입력 허용

    printw("방향키를 눌러보세요. 종료하려면 'q'를 누르세요.\n");
    refresh();

    while ((ch = getch()) != 'q') {
        switch (ch) {
            case KEY_UP:
                printw("위쪽 방향키 눌림\n");
                break;
            case KEY_DOWN:
                printw("아래쪽 방향키 눌림\n");
                break;
            case KEY_LEFT:
                printw("왼쪽 방향키 눌림\n");
                break;
            case KEY_RIGHT:
                printw("오른쪽 방향키 눌림\n");
                break;
            default:
                printw("다른 키: %c\n", ch);
                break;
        }
        refresh();
    }

    endwin();           // ncurses 종료
    return 0;
}

5. 컴파일 및 실행

아래 명령어로 컴파일 및 실행합니다.

gcc -o key_input key_input.c -lncurses
./key_input

실행 후 방향키나 키를 눌러보면 눌린 키에 따라 메시지가 화면에 출력됩니다.
‘q’를 누르면 프로그램이 종료됩니다.

6. 요약 및 다음 단계

  • cbreak(), noecho(), keypad() 함수로 입력 모드를 조정할 수 있습니다.
  • getch()로 문자와 특수키 모두 읽을 수 있으며, 방향키 인식이 가능합니다.
  • 다음 글에서는 화면 갱신과 윈도우(window) 관리, 그리고 간단한 인터페이스 구성법을 다뤄보겠습니다.
728x90