2013-09-04 10 views
1

리눅스에서 conio.h의 getch를 사용하기로 결정했습니다. 나는 이것이 권장 사항이 아니라고 들었지만 지금은 해결책이 필요하고 나중에 프로그래밍 기술을 향상시키기 위해 노력합니다.리눅스에서 Ctrl- * letter *를 캡쳐 할 getch()

하나의 키을 입력하는 방법에 대한 자습서를 읽고 프로그램에서 뭔가를 할 수 있습니다. 예를 들면 :

printf("Press any key\n"); 
c = getch(); 
if (c) 
    printf(" A key is pressed from keyboard "); 
else 
    printf("An error occurred "); 

그러나 나는 'A Ctrl 키를 열쇠로 개최 된'인쇄 Ctrl 키 + E를 입력 사용하려는 경우. 이 일을 어떻게하면 해결할 수 있을까요?

+1

화려한 따옴표는 무엇인가요? – trojanfoe

+0

가능한 복제본은 [Linux의 getch() 및 getche()와 동일할까요?] (http://stackoverflow.com/questions/7469139/what-is-equivalent-to-getch-getche-in-linux). 리눅스에는'conio.h '가 없습니다 - 이것은 마이크로 소프트의 것입니다 – mvp

답변

1

getch()은 Windows에서 #include <conio.h> 또는 #include <curses.h>에있는 함수입니다. 그것들 중 하나를 부르겠습니까? C 표준에 정의 된 함수가 아닙니다 (표준 함수는 getc()getchar()입니다). <curses.h>에서 함수를 사용하는 경우 먼저 초기화를 먼저 수행하고 나중에 완료해야합니다.

당신이 전화를 할 계획 기능있는 문제를 해결 가정하면, 당신은 제어 문자 수 1..26 것을 찾아 낼 것입니다 :

  • 제어-A = 1
  • 제어-Z = 26

당신은 0에서 getch()에 약간의 번역 작업을해야 할 수도 있습니다- 기능 키 및 기타 특수 키 스트로크에 대한 흥미로운 값을 반환하며 제어 키에 대해 예상 한 값을 반환하지 않을 수 있습니다.

또한 터미널 드라이버는 다양한 문자를 해석하여 혼동을 줄 수 있습니다 (특히 getchar() 또는 getc()을 사용하는 경우). 예를 들어, Control-D은 EOF로 처리됩니다. Control-H은 백 스페이스 또는 지우기가 될 가능성이 높습니다. Control-C은 인터럽트 일 가능성이 높습니다. Control-Z은 '일시 중지'('현재 프로그램을 종료하지 않고 셸로 돌아가서 - 그냥 프로 시저를 일시 중지'함)를 의미합니다. 다른 제어 키에는 다른 의미가 있습니다. Control-V Control-Z를 입력하여 '진짜'의미를 얻을 수 있습니다. 예를 들어 Control-V을 사용하여 다음 문자의 특수 의미를 표시하지 않을 수 있습니다.

+0

# 을 #include 할 때 ncurses를 사용하고 있습니까? 죄송합니다. 현재 사용 가능한 모든 설명서와 혼동을 느낍니다. –

+0

리눅스를 사용하고 있다면, 예,'#include '은 ncurses를 사용함을 의미합니다 (프로그램을 링크하는 명령에'-lncurses'를 추가해야합니다). 예, 모든 문서와 혼동 할 여지가 있습니다. –

+0

나는 ncurses가 OP의 필요에 적합하다는 것을 의심합니다. 'getch()'를 사용하기 전에 암묵적으로 현재 윈도우를 참조하기 때문에 초기화를해야합니다. ncurses를 사용하는 프로그램은 일반적으로 전체 화면을 차지합니다.(예, 이것은 아주 오래된 질문입니다. 누군가가 방금 편집했기 때문에 그것을 보았습니다.) –