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
'프로그래밍 > C언어' 카테고리의 다른 글
C 언어에서 ncurses 사용하기: 간단한 메뉴 구현과 사용자 인터페이스 구성 (0) | 2025.06.14 |
---|---|
C 언어에서 ncurses 사용하기: 화면 갱신과 윈도우 관리 (0) | 2025.06.13 |
C 언어에서 ncurses 사용하기: 설치와 기본 화면 출력 (1) | 2025.06.11 |
pthread_cond_wait Spurious wakeups (0) | 2015.06.24 |
C언어에서 bool type 사용법 (0) | 2013.09.11 |