如何在不停止C程序的情况下按下最后一个键?

使用命令行界面编写应用程序,我想知道是否按下了F1或ESC或箭头键。 这样做最简单的方法是什么? 我想避免使用readline类型库。

这是一个特定于Linux的问题; 该程序不是multithreading的。

Linux的kbhit()实现在Beginning Linux Programming第167页中介绍。您可以在提供的链接上在线阅读。

编辑:我提到kbhit()因为它是在解决了与Linux相关的问题之前发布的解决方案。 不幸的是,该解决方案已被删除,这是不幸的。 原理是当kbhit()返回非零值时,后续阻塞的面向字符的读取调用将不会阻塞。 这仅适用于面向字符的输入; getchar()和其他读取stdio的标准函数通常是面向行的 ,所以阻塞直到换行。

在C标准中没有办法做到这一点,但是各种操作系统上的C实现通常都有一些扩展来执行此操作。

在Windows上,您可以使用getch()。 在Linux和Unix上,看看这个问题:

非阻塞getch(),ncurses

此外,这是C FAQ列表中“系统依赖关系”部分中的第一个问题:

19.1

multithreading?