基本上,我想使用getchar()扫描输入,我希望如果用户输入像ESC或箭头键这样的字符,这根本不应该在屏幕上回显,但我仍然希望输入到被处理。
答案 0 :(得分:0)
见ascii(7)的人:
Oct Dec Hex Char
...
033 27 1B ESC (escape)
这是转义字符的代码。
答案 1 :(得分:0)
让你入门的东西。基本上你需要关闭ECHO并将终端设置为无缓冲模式。然后,您必须过滤ANSI转义序列。这些是ESC(27),后跟[和一封信。下面的示例已经在OS X中进行了测试,但可能应该在Linux中运行。
#include <termios.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int c,escseen=0,code;
struct termios t;
tcgetattr(0, &t);
t.c_lflag &= ~(ECHO|ICANON);
tcsetattr(0, TCSANOW, &t);
for(;;)
{
c=getchar();
if(c>=32)
{
if(escseen)
if(c=='[')
{
code=getchar();
/* do something with the esc code */
continue;
}
putchar(c);
escseen=0;
}
else
if(c==27)
{
escseen=1;
}
}
}