2012-04-12 2 views
0

내가 키 누르기 이벤트 "를 입력"않는 방법코드가

DWORD qThreadID; 
HANDLE hThread = CreateThread(0, 0, ThreadFn, &uiCounter, 0, &qThreadID); 

// Loop until the user enters 'q' 
char cChar = ' '; 
while (cChar != 'q') { 
    cout << uiCounter << endl; 
    cChar = (char)getchar(); 
} 

으로 인터넷에 다음 코드를보고 내가 C에서 키를 입력 누르에만 다음 단계 ++ (나사)에 도달 어떻게 작동 ? 감사를 (내가 "입력"다른 키를 누를 때 기능 작동의 언론을 제외하고 그것을 디버깅 할 때) 는

+0

MT 응용 프로그램에서 C 런타임 라이브러리 함수를 사용하는 경우 스레드 관리를 위해'CreateThread' 대신'_beginthreadex'를 사용하십시오. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx – xaero99

답변

3

getchar()은 라이브러리 및 OS 모두에서 버퍼링되는 표준 입력에서 읽습니다. Enter 키가 입력 될 때까지 콘솔 장치에서 읽기에서 일반적인 OS가 반환되지 않습니다. 명령 행 편집을 지원하며 입력을 완료하려면 Enter 키가 필요합니다.

+0

그래서 입력 이벤트를 기본값으로 생각합니까? –

+0

무엇을위한 기본값으로? 'getchar()'은 한 번에 한 문자 씩 키보드에 입력 된 것을 반환합니다 (표준 입력이 키보드에 연결되어 있다고 가정). 그러나 완전한 행이있을 때까지 프로그램은 문자를 얻지 못합니다. 키보드를 한 번에 하나씩 읽을 수는 있지만 추가 라이브러리 (예 : ncurses) 또는 시스템 종속 코드가 필요합니다. 'getchar()'의 배후에있는 모델은 이벤트가 아니라 문자의 흐름입니다. –

1

getchar가()는 입력 한 문자를 읽습니다.

그러나 터미널은 입력에 라인 버퍼링을 수행 할 수 있으므로 Enter 키를 누르기 전까지는 프로그램에 입력이 전송되지 않습니다.

0

enter는 입력이 때문에 사용자 입력의 끝과 getChar()는 단순히 enter을 누르면 아무것도 반환되지 않습니다 있도록이 스트림로부터 1 문자 버퍼를 읽고하려고 생각합니다 명령 행으로 EOF으로 해석됩니다 \n 문자를 입력하지 않고 msdn을 참조하십시오 : http://msdn.microsoft.com/en-us/library/5231d02a%28v=vs.71%29.aspx

+0

getchar()가 단일 문자 버퍼를 읽으려고하므로 "Enter"대신 화살표 키 중 하나를 눌러도 작동하지 않거나 getchar()이 기본값 (\ n)을 defualt/non changeble 엔티티 –

+0

'\ n'은 __not__이 파일의 끝으로 해석되며 사용자 입력의 끝이 아닙니다. Unix에서는 control-D가 파일의 끝으로 해석되며 Windows에서는 control-Z도 비슷하게 작동합니다. –

+0

@jameswhitehurst Windows에서, 적어도 콘솔 창에서는 화살표 키가 OS에 의해 차단되어 프로그램에 표시되지 않습니다. (하지만이 방법을 변경하는 방법이있을 것이라고 확신합니다.) 그 이유는 개행 문자가 입력 될 때까지 입력이 전달되지 않는 이유 중 하나이기 때문입니다. 위쪽 화살표를 사용하여 이전 줄을 가져온 다음 편집하고 Enter 키를 누르면 해당 줄이 프로그램에 전송 된 문자가됩니다. –