在未按enter确认的情况下读取组合
Reading a combination without confirming with enter?
所以基本上,我只想从用户那里读取字符,并使我的代码知道,当用户键入一个定义的组合(例如,CTRL+F -但不与Enter确认)时,它是输入的结束。我该怎么做呢?我只知道如何读取输入字符并比较它们的ASCII值…
编辑再看一遍你的问题,我发现我误解了你的问题。我把它放在这里,因为它可能对你或其他人仍然有用。
你所要求的与读取字符没有太大关系。实际上,CTRL根本就不是一个字符。你只需要检查按键是否按下。处理这类输入依赖于平台,即使在单个平台上,也会存在多个方法。在windows上实现它的一种方法是使用GetAsyncKeyState
。此函数将检查当前是否正在按下指定的键。请注意,它不会"记住"输入,因此您必须每秒多次检查此函数以注册所有用户输入。
为函数提供一个参数,指定要检查状态的键。所有关键代码的列表可以在这里找到
的例子:
#include <iostream> //for output
#include <windows.h> //for GetAsyncKeyState
int main()
{
while(true)
{
if( GetAsyncKeyState(VK_CONTROL) ) //CTRL-key is pressed
{
if( GetAsyncKeyState( 0x46 ) ) //F-key is pressed
std::cout << "CTRL-F is pressed" << std::endl;
if( GetAsyncKeyState( 0x58 ) ) //X-key is pressed
break;
}
}
std::cout << "CTRL-X was pressed, stopping.." << std::endl;
}
此示例将持续检查CTRL-F
是否被按下,如果是,则写入输出,直到CTRL-X
被按下。
Windows系统调用ReadConsoleInput
允许您直接读取控制台输入。您可能希望将该调用包装到一个函数中,该函数仅从ReadConsoleInput
函数的几个参数中提取基本数据。您可以使用GetNumberOfConsoleInputEvents
编写一个函数来检查是否有任何输入。
try
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
bool keepGoing = true;
char key = ' ';
while (keepGoing){
cout << "Enter a key" << endl;
while(_kbhit()){
key = _getch();
cout << "You entered: " << key << endl;
}
}
}
然后在结束循环时指定分隔符。
如果在Linux上诅咒是可用的。还有一个getch函数。如果您的目标是跨平台兼容性,则应该使用诅咒。Ncurses库函数与conio.h中的函数类似。ncurses教程
相关文章:
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 如何在不知道大小的情况下读取文本文件并存储到数组中
- 在不使用getline的情况下读取C 中的stdin
- 如何迭代在不知道其大小的情况下读取的字符串?
- 在不知道矩阵名称的情况下读取YML
- 我可以在不知道文本文件的列数的情况下读取二维数组中的文件吗?
- C++在不使用字符串流的情况下读取具有任意长度和格式的行的多行文件
- Windows:如何让子进程在不关闭输入匿名管道的情况下读取它
- 如何在不显示十六进制的情况下读取dat文件中的文本?C++
- 有没有办法在不加载的情况下读取 .so 文件的内容
- 如果我在键不存在的情况下读取地图的值,会发生什么情况?
- 如何在不按ENTER和不使用getch()或getche()的情况下读取C++中的字符
- 在不使用临时文件的情况下读取linux命令的输出
- 是否可以在没有安装 Office Excel 或其他先决条件框架的情况下读取 Qt 或 C++ Excel
- 我想在写入过程完成后从二进制文件中读取数据,也可以在没有写入过程的情况下读取数据
- 在未按enter确认的情况下读取组合
- 如何在没有换行符的情况下读取CSV记录"rn"?
- 如何在不知道一行文本有多少元素的情况下读取每个元素?(c++)