【问题标题】:Why doesn't scanf work when using the Win32 ConsoleInput function?为什么使用 Win32 ConsoleInput 函数时 scanf 不起作用?
【发布时间】:2010-02-25 23:31:49
【问题描述】:

这是示例代码,我正在将这些函数用于程序,但 scanf 效果不佳:它不显示我的输入,并且只有在按两次 enter 键后才接受输入。

这是代码:

#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);
}

感谢您的帮助!

【问题讨论】:

    标签: c winapi scanf


    【解决方案1】:

    这不是因为你在ReadConsoleInput中使用,而是因为你改变了控制台模式。通过将SetConsoleMode(hStdin, fdwSaveOldMode); 放在对scanf() 的调用之前,恢复控制台模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2015-02-20
      • 2021-08-20
      相关资源
      最近更新 更多