c - 是否可以在 C 中捕获 Enter 按键?

标签 c user-input keypress fgets

我想编写一个 C 程序来标记字符串并逐字打印出来,慢慢地,我希望它同时监听用户按下 Enter,此时他们将能够输入数据。这可能吗?

最佳答案

更新:请参阅下面@modifiable-lvalue 的评论以获取更多有用的信息,例如,使用 getchar() 而不是 getch(),如果你走那条路的话。


绝对有可能。请注意 gets() 可能不会完全有助于此目的,因为 gets() 将 enter 解释为不是 enter 本身,而是“现在,我是用户, 已经输入了尽可能多的字符串”。因此,通过 gets() 仅按回车键收集的输入将显示为空字符串(这对您来说可能可行)。 请参阅:http://www.cplusplus.com/reference/cstdio/gets/ . 但是还有其他不使用 gets() 的原因——它不允许您指定读取的最大值,因此很容易溢出您正在使用的任何缓冲区。等待发生的安全和错误噩梦。所以您需要 fgets(),它允许您指定要读入的最大大小。fgets() 将在按下回车键时在字符串中放置一个换行符。 (顺便说一句,@jazzbassrob 在 fgets() 上的支持)。

您还可以考虑像 getch() 这样的东西——它确实处理单个按键(但它处理具有非直接扫描代码的键有点复杂)。您可能会发现此示例很有帮助:http://www.daniweb.com/software-development/cpp/code/216732/reading-scan-codes-from-the-keyboard .但由于扫描码问题,getch() 以平台详情为准。

因此,如果您想要一种更便携的方法,您可能需要使用重量更重但相当便携的东西,例如 ncurses .

我怀疑你可以用 fgets() 做你想做的事,记住 enter 会给你一个只有换行符的字符串,或者 getch().

我只是想让您了解一些可能出现的实现/平台问题。

C 绝对可以做到这一点,但它比第一次尝试时可能猜测的要复杂一些。这是因为从历史上看,终端输入非常依赖于平台。

关于c - 是否可以在 C 中捕获 Enter 按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487674/

相关文章:

Javascript 数组效率低下的问题

events - Lua中的KeyPress事件?

angularjs - 使用 AngularJS 按 Enter 键提交表单

PHP7哈希表内部结构

c - STM32:使用 DMA 时 I2S 输入不工作

java - 在 Java 中重用字符串

windows - 汇编:如何更改此代码以请求用户输入

c - 为什么我在使用 malloc 并使用 sizeof 打印后没有得到正确的大小?

C - 取消引用术语后的引用

c++ - Qt 响应子 QWidget 中的 keyPressEvent