2010-02-25 5 views
1

이것은 예제 코드입니다. 프로그램에 이러한 함수를 사용하고 있지만 scanf가 제대로 작동하지 않습니다. 입력을 표시하지 않고 Enter 키를 두 번 누른 후에 만 ​​입력을 허용합니다. 도움을Win32 ConsoleInput 함수를 사용할 때 scanf가 작동하지 않는 이유는 무엇입니까?

#include <stdio.h> 
#include <windows.h> 
char c[25]; 
void KeyEventProc(KEY_EVENT_RECORD); 

void KeyEventProc(KEY_EVENT_RECORD ker){ 
    if(ker.bKeyDown) ; // do stuff 
} 

main(){ 
HANDLE hStdin; 
DWORD cNumRead, fdwMode, fdwSaveOldMode, i; 
INPUT_RECORD irInBuf[128]; 
hStdin = GetStdHandle(STD_INPUT_HANDLE); 
GetConsoleMode(hStdin, &fdwSaveOldMode); 
fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; 
SetConsoleMode(hStdin, fdwMode); 
ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead); 
for (i = 0; i < cNumRead; i++){ 
    switch(irInBuf[i].EventType){ 
    case KEY_EVENT: 
    KeyEventProc(irInBuf[i].Event.KeyEvent); 
    // do stuff 
    break; 
    default: 
    // do stuff 
    break; 
    } 
} 
scanf("%s", &c); 
printf("%s", c); 
} 

감사 :

이 코드입니다!

답변

2

콘솔 모드를 변경했기 때문에 ReadConsoleInput에서 사용하고 있기 때문이 아닙니다. 콘솔 앞에 SetConsoleMode(hStdin, fdwSaveOldMode);을 넣고 scanf()을 호출하여 콘솔 모드를 복원하십시오.

관련 문제