如何使用_getch()的键盘函数,就像getline()一样
How to use keyboards function with _getch(), as it is possible with getline()?
我的问题是,当我的用户在终端中推送制表时,我想做一件特殊的事情。我的第一个代码解释了:
char buffer[100];
while (true)
{
std::cin.getline(buffer, 100); // do IMMEDIATELY something if 'tabulation' was used ?
}
所以我问自己如何检查每个字符?我尝试了_getch();
while (true)
{
c = _getch();
if (c == 't')
// do something special
else
std::cout << (char)c;
}
但是现在,我不能使用任何特殊功能键作为箭头,del,支持等…我不能移动到我输入的内容,因为我可以用getline()
那么有什么解决方案可以在getline()
的中间做一个特殊的中断吗?或者是否有可能以不同的方式使用_getch()
?我还试图做另一个线程(一个与getline()
和_getch()
检查每一个),但我不太确定我可以用线程做什么。
它可以处理每一个特殊的功能(箭头键,del,支持,等等…)"手动",但我正在寻找另一个解决方案。
假设您指的是Microsoft C运行时库中的_getch()函数:
_getch和_getwch函数从控制台,不回显字符。这些函数都不能用于读取CTRL+C。当读取功能键或箭头键时,每个函数必须被调用两次;第一次调用返回0或0xE0,并且第二次调用返回实际的键代码。
因此,如果_getch()
返回0或0xE0(224),则必须再次调用函数以查看按下的特定键。
至少在我的机器上,这些"扩展"字符代码如下(十进制):
- 0 59 = f1
- 0 60 = f2
- 0 61 = f3
- 0 62 = f4
- 0 63 = f5
- 0 64 = f6
- 0 65 = f7
- 0 66 = f8
- 0 67 = f9
- 0 68 = f10
- 224 71 = Home
- 224 72 = & warr;(箭头)
- 224 73 = Page Up
- 224 75 = ←(左箭头)
- 224 77 = & rrr;(右箭头)
- 224 79 =结束
- 224 80 = ↓(向下箭头)
- 224 81 = Page Down
- 224 133 = f11
- 224 134 = f12
相关文章:
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 为什么C++中没有常量引用,就像常量指针一样?
- 如何将输入值拆分为4位矢量,就像将n位拆分为每部分矢量的半字节一样
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- C++代码生成核心文件,就像 gdb >> gcore 一样
- 从 boost::variant 中逐个索引获取项目,就像使用 std::variant 一样
- 线程 1 从文件读取,就像线程 2 写入同一文件一样
- 如何将值插入到 c++ boost::multiindex 集合的特定索引中,就像在 std::list 中一样
- 如何在Powershell中运行C++程序,就像CMD一样?
- 将参数传递给成员函数,就像使用 std::cout 一样
- 我想知道如何将所有数值与没有任何空格的字符串分开,就像 123we45rt75 一样
- 如何获得CPU当前速度,就像Taskmgr中的价值外交一样?下图
- 在C 中,对Pair类STL的用途是什么,就像数据类型或容器一样
- 如何在文件系统之上添加层?就像OneDrive或Google云端硬盘中的缓存一样
- 为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
- 可变参数函数并复制粘贴这些参数(就像我们在宏中一样)
- 使用 PowerShell 作为控制台,就像它是使用 AllocConsole 创建的一样
- 在Qt中:我可以输出到“stdout”吗,就像使用qDebug()输出到“stderr”一样简单
- 获取原始密钥,就像没有移位修饰符一样