2010-02-25 53 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);来恢复控制台模式。