我有一个双向链接列表类,我想在用户键入时将字符添加到列表中,或者每次用户按下退格键时删除列表中的最后一个节点,同时在控制台中显示结果-time。
我将使用哪些功能拦截单个键盘输入,并将其实时显示到控制台?所以结果如下:
用户开始输入:
Typ_
用户停止输入:
在screen_
上输入此内容
用户按退格键5次:
在s_
上输入此内容
特定操作系统是Windows(vista,更具体地说)。
作为旁注,windows.h下的GetAsyncKeyState似乎可能用于键盘输入,但是控制台的实时显示问题仍然存在。
答案 0 :(得分:4)
C ++没有“键盘”的概念。它只有一个名为“stdin”的不透明FILE,您可以从中读取。但是,该“文件”的内容由您的环境填充,特别是您的终端。
大多数终端在将输入行发送到附加进程之前缓冲输入行,因此您永远不会看到退格的存在。你真正需要的是直接控制终端。
这是一个非常依赖于平台的过程,如果您需要特定的建议,则必须指定您的平台。在Linux上,尝试ncurses
或termios
。
答案 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;
}