在没有确认输入的情况下阅读组合?

时间:2013-03-21 15:32:22

标签: c++

所以基本上我只想读取用户的字符并让我的代码知道当用户键入一个已定义的组合时(例如,CTRL + F - 但没有用Enter确认,例如),它就是输入的结束。我怎样才能做到这一点?我只知道如何用输入读取字符并比较它们的ASCII ...

3 个答案:

答案 0 :(得分:1)

EDIT 再次阅读你的问题,我意识到我误解了你的问题。我会离开这个,因为它可能对你或其他人有用。


您要求的内容与阅读角色无关。事实上,CTRL根本不是一个角色。你基本上只是检查按键。处理这种输入是依赖于平台的,即使在单一平台上,也会存在多种方法。对Windows进行此操作的一种方法是使用GetAsyncKeyState。此函数将检查是否正在按下指定的键。请注意,它不会“记住”输入,因此您必须每秒多次检查此功能以注册所有用户输入。

您为该函数提供一个参数,指定要检查其状态的键。可以找到所有密钥代码的列表here

示例:

#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

答案 1 :(得分:0)

尝试

#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上有curses可用。还有一个getch功能。如果你的目标是跨平台兼容性,你应该使用curses。 ncurses库函数类似于conio.h中的函数。 ncurses tutorial

答案 2 :(得分:0)

Windows系统调用ReadConsoleInput允许您直接读取控制台输入。您可能希望将该调用包装到一个函数中,该函数只从ReadConsoleInput函数的几个参数中提取基本数据。您可以使用GetNumberOfConsoleInputEvents编写一个函数来检查是否有任何输入。