如何忽略从stdin读取C的箭头键?

时间:2009-05-22 15:23:06

标签: c stdout stdin system-calls arrow-keys

我正在使用read()系统调用从标准输入中读取,但是有一件小事情困扰着我。我不能使用箭头键...我真正想做的是使用箭头键在打字文本中来回移动但我认为这并不容易...所以,我至少想做什么,是要忽略它们。

现在,按任意箭头键会产生奇怪的输出,我想阻止任何东西写入标准输出(因此从read()系统调用中的标准输入读取)。

这很容易实现,还是不容易?

2 个答案:

答案 0 :(得分:4)

为了按理想的方式解释箭头键(即来回移动和编辑输入),通常需要使用库。对于Linux,标准为GNU Readline。希望其他人可以说出您通常用于Windows CLI应用程序的内容。

答案 1 :(得分:0)

答案最终取决于密钥的来源。我在Cygwin下运行这个程序:

int main(void)
{
    int c=0;

    while( c != 'X' ) {
        c = getchar();
        printf("\nc=%d", c);
    }
}

每次光标键出现时,我都会看到escape(27),一个括号和另一个字符。 所以,如果你得到这样的结果,你每次看到27时都可以跳过3个键。你也可以查看它们并使用它们!

如上所述,YMMV,特别是对于O.S.,以及您调用的实际键获取功能。