【问题标题】:How to ignore arrow keys in C reading from stdin?如何忽略从标准输入读取的 C 中的箭头键?
【发布时间】:2009-05-22 15:23:06
【问题描述】:
我正在使用 read() 系统调用从标准输入读取数据,但有一件小事困扰着我。我不能使用箭头键...我真正想做的是使用箭头键在键入的文本中来回移动,但我认为这并不容易...所以,我至少想做的, 就是忽略它们。
现在,按任何箭头键都会产生奇怪的输出,我想阻止任何东西被写入标准输出(随后在我的 read() 系统调用中从标准输入读取)。
这很容易实现还是没那么容易?
【问题讨论】:
标签:
c
stdout
stdin
system-calls
arrow-keys
【解决方案1】:
为了以理想的方式解释箭头键(即来回移动和编辑输入),您通常需要使用库。对于 Linux,标准是 GNU Readline。希望其他人能说出您通常用于 Windows CLI 应用程序的内容。
【解决方案2】:
答案最终取决于密钥的来源。我在 Cygwin 下运行这个程序:
int main(void)
{
int c=0;
while( c != 'X' ) {
c = getchar();
printf("\nc=%d", c);
}
}
每次出现光标键时,我都会看到转义 (27)、括号和另一个字符。
所以,如果你得到这样的结果,你可以在每次看到 27 时跳过 3 个键。你也可以看看它们并利用它们!
如前所述,YMMV,特别是对于操作系统,以及您调用的实际密钥获取函数。