实时键盘输入到控制台(在Windows中)?

时间:2011-09-22 17:36:44

标签: c++ windows input

我有一个双向链接列表类,我想在用户键入时将字符添加到列表中,或者每次用户按下退格键时删除列表中的最后一个节点,同时在控制台中显示结果-time。

我将使用哪些功能拦截单个键盘输入,并将其实时显示到控制台?所以结果如下:

用户开始输入:

  

Typ_

用户停止输入:

  

在screen_

上输入此内容

用户按退格键5次:

  

在s_

上输入此内容

特定操作系统是Windows(vista,更具体地说)。

作为旁注,windows.h下的GetAsyncKeyState似乎可能用于键盘输入,但是控制台的实时显示问题仍然存在。

3 个答案:

答案 0 :(得分:4)

C ++没有“键盘”的概念。它只有一个名为“stdin”的不透明FILE,您可以从中读取。但是,该“文件”的内容由您的环境填充,特别是您的终端。

大多数终端在将输入行发送到附加进程之前缓冲输入行,因此您永远不会看到退格的存在。你真正需要的是直接控制终端。

这是一个非常依赖于平台的过程,如果您需要特定的建议,则必须指定您的平台。在Linux上,尝试ncursestermios

答案 1 :(得分:2)

您可以使用ReadConsoleInput,将传入的字符添加到列表中,查找退格键(INPUT_RECORD-&gt; KEY_EVENT_RECORD.wVirtualScanCode == VK_BACKSPACE)并从列表中删除所有字符的最后一个字符。< / p>

答案 2 :(得分:2)

你会感到惊讶,但这段代码会做你想要的:

/* getchar example : typewriter */
#include <stdio.h>

int main ()
{
  char c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}