这是示例代码,我将这些函数用于程序,但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);
}
感谢您的帮助!
答案 0 :(得分:2)
这不是因为你在ReadConsoleInput
中使用,而是因为你改变了控制台模式。通过在调用SetConsoleMode(hStdin, fdwSaveOldMode);
之前添加scanf()
来恢复控制台模式。