c++ - 为什么 _getch() 仍然等待输入而不是直接注册用户输入?
问题描述
我想使用箭头键用户输入,而用户每次单击箭头后都不必按 Enter。因此,我决定使用 _getch(),据称它正是这样做的。它是我导入的 conio.h 库的一部分。但是,在我的情况下,_getch() 还要求用户按 Enter 键,并且不会立即注册用户输入,因为它应该这样做。我该如何解决?(我在 Windows 上运行)
#include<iostream>
#include <conio.h>
using namespace std;
int main() {
int p = _getch();
cout<<p;
return 0;
}
例如,在上面的代码中,并没有在控制台接收到输入后直接打印 p 的值,而是等待回车被按下。
解决方案
从微软文档:
读取功能键或方向键时,每个功能必须调用两次;第一次调用返回 0 或 0xE0,第二次调用返回实际的键码。
因此,您的代码的修订版本可能如下所示:
#include <iostream>
#include <conio.h>
int main() {
int p = 0;
while(p == 0 || p == 0xE0)
p = _getch();
std::cout << p;
return 0;
}
推荐阅读
- python - osmnx get_nearest_edges 函数结果不清楚哪个键
- flutter - 当我向服务器发布请求时发生 HttpException,如下所示
- html - Bootstrap 4:如何使用媒体查询更改文本的字体大小
- reactjs - 如何从我的网站向其他网站提交值?
- swiftui - SwiftUI 中 .compositingGroup() 的目的是什么?
- c++ - 使用类模板模拟 FIFO 的 C++ 程序,出队时返回值 3221225477
- php - journal3 主题中的“添加到购物车”按钮在哪里?
- gatling - Gatling:从长远来看,我们应该将一个 REST API 放在一个模拟中吗?
- css - 是否可以仅对 png 图像的一部分应用投影?
- .net-core - 如何使用 NET Core 在 Swagger Doc 上将模型请求成员标记为必需