Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 键盘箭头作为输入源_C++ - Fatal编程技术网

C++ 键盘箭头作为输入源

C++ 键盘箭头作为输入源,c++,C++,有没有人能解释一下这段代码的第一部分,以及如何使用std i/o,而不是使用有限的范围。提前谢谢。wincon.h库是什么? 我正在尝试从键盘箭头(导航器)获取输入 ‪#‎包括‬ #包括 #包括 #包括 空干管() { 句柄hInput=GetStdHandle(标准输入句柄); DWORD NumInputs=0; DWORD InputsRead=0; bool running=true; 输入/输出; GetNumberOfConsoleInputEvents(hInput和NumInp

有没有人能解释一下这段代码的第一部分,以及如何使用std i/o,而不是使用有限的范围。提前谢谢。wincon.h库是什么? 我正在尝试从键盘箭头(导航器)获取输入

‪#‎包括‬ 
#包括
#包括
#包括
空干管()
{
句柄hInput=GetStdHandle(标准输入句柄);
DWORD NumInputs=0;
DWORD InputsRead=0;
bool running=true;
输入/输出;
GetNumberOfConsoleInputEvents(hInput和NumInputs);
(跑步时)
{
读控制台输入(hInput、&IRIPUT、1、&InputsRead);

//std::coutC风格的标准控制台I/O被称为“煮熟的”,这意味着输入在缓冲并完成(用户点击enter)之前不会到达应用程序来自控制台的I/O涉及使用特定于系统的功能。在本例中,
ReadConsoleInput
功能和相关功能

不幸的是,允许使用箭头键和类似的功能,同时使用标准I/O功能是相当困难的。在大多数环境中,这可能是可行的,但通常不直接公开所需的功能-换句话说,您无法“访问”为了实现这一点,您必须修改的位—您要么编写自己的I/O功能,要么使用“标准方法”。根据您实际尝试实现的内容,其中一个是“正确的”解决方案。在不知道您正在做什么类型的应用程序以及您试图实际实现什么的情况下,很难说

据我所知,在这种情况下,
wincon.h
是完全多余的,不应该需要(我认为也不需要
conio.h
)。发布的代码也完全无用地调用了
GetNumberOfConsoleInputEvents
——如果您想执行“is a key pressed”(您不想等待键盘输入)之类的操作,则调用此函数可以检查输入队列中等待的按键数

DWORD NumInputs = 0;
DWORD InputsRead = 0;
bool running = true;
INPUT_RECORD irInput;
GetNumberOfConsoleInputEvents(hInput, &NumInputs);
代码的作用:

HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
获取低级控制台标准输入的句柄

DWORD NumInputs = 0;
DWORD InputsRead = 0;
bool running = true;
INPUT_RECORD irInput;
GetNumberOfConsoleInputEvents(hInput, &NumInputs);
获取控制台的“事件”数量——换句话说,有多少按键在“等待”。由于这些信息没有在任何地方使用,因此在这个特定示例中是毫无意义的

while(running)
{
   ReadConsoleInput(hInput, &irInput, 1, &InputsRead);
从控制台读取一个输入。(您应该检查
InputsRead
之后是否包含1,并检查
ReadConsoleInput
中的返回值以确保)


//std::非常感谢您的帮助,非常感谢。我不是自己编写代码的,我正在努力寻找一种方法,在我正在制作的游戏中,使用键盘箭头来获取输入,以便在列表中上下移动光标。这是我在cplusplus.com上找到的,所以我想问一下。您是否可以建议其他方法更简单或更清晰,请执行并提前感谢您问题中的函数对于读取“原始”键盘输入很好。问题在于“混合”标准输入。
   // std::cout << irInput.Event.KeyEvent.wVirtualKeyCode << std::endl;
   switch(irInput.Event.KeyEvent.wVirtualKeyCode)