如何忽略从标准输入读取的 C 中的箭头键?

发布于 2024-07-20 07:04:29 字数 214 浏览 8 评论 0原文

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

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

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

I'm reading from the standard input using the read() system call but there's a tiny thing that bothers me. I can't use the arrow keys... What I really wanted to do was to use arrow keys to go back and forth within the typed text but I think that's not that easy... So, what I at least want to do, is to ignore them.

Right now, pressing any of the arrow keys produces strange output and I want to prevent anything from being written to the standard output (consequently read from the standard input in my read() system call).

Is this easily possible to achieve or it's not that easy?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥抱我好吗 2024-07-27 07:04:29

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

In order to interpret the arrow keys the way you would ideally like to (i.e. to move back and forth and edit the input), you generally need to use a library. For Linux, the standard is GNU Readline. Hopefully someone else can say what you would normally use for a Windows CLI app.

蒗幽 2024-07-27 07:04:29

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

int main(void)
{
    int c=0;

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

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

如前所述,YMMV,特别是对于操作系统,以及您调用的实际密钥获取函数。

The answer ultimately depends on where the keys come from. I ran this program under Cygwin:

int main(void)
{
    int c=0;

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

Every time a cursor key comes along, I see escape (27), a bracket, plus another character.
So, if you get results like that, you can skip 3 keys every time you see a 27. You could also look at them and make use of them!

As mentioned, YMMV, especially for the O.S., and the actual key-getting function you call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文