C++(devc++)怎么实时检测输入字符?

现有一个程序while(1)scanf(“%d”,&a);这个程序会一直循环输入我想写另一个函数,在不改变这个函数的情况下检测键盘输入的字符,如果是数字就正常输入,如果是... 现有一个程序
while(1)
scanf(“%d”,&a);
这个程序会一直循环输入
我想写另一个函数,在不改变这个函数的情况下检测键盘输入的字符,如果是数字就正常输入,如果是Esc就直接退出,怎么做到。
类似vb里的键盘输入事件
展开
 我来答
GTA小鸡
高粉答主

2020-06-22 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
你需要将关闭行缓冲输入模式,然后用ReadConsoleInput直接读缓冲区内容。行缓冲的标准库函数scanf不可能读入Esc,也不可能在按键后立即返回。
HANDLE hwnd = GetStdHandle(STD_INPUT_HANDLE);
DWORD dwMode;
INPUT_RECORD record[128];
DWORD i, iRead;
char keyName[128];
GetConsoleMode(hwnd, &dwMode);
SetConsoleMode(hwnd, dwMode & ~ENABLE_LINE_INPUT);
while (1)
{
WaitForSingleObject(hwnd, INFINITE);
ReadConsoleInput(hwnd, record, 128, &iRead);
for (i = 0; i < iRead; i++)
{
switch(record[i].EventType)
{
case KEY_EVENT:
if (record[i].Event.KeyEvent.bKeyDown)
{
// 16~23位需要为scan code
GetKeyNameTextA(record[i].Event.KeyEvent.wVirtualScanCode << 16, keyName, 128);
printf("You pressed %s\n", keyName);
}
break;
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2020-06-22 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
如果你不改上面的代码,那就只能用键盘钩子,详细内容自己查一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式