2010-02-25 55 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中使用,這是因爲你改變了控制檯模式。通過在scanf()的呼叫之前加SetConsoleMode(hStdin, fdwSaveOldMode);來恢復控制檯模式。