我想编写一个 C 程序来标记一个字符串并逐字打印出来,慢慢地,我希望它同时监听用户按下 Enter,此时他们将能够输入数据。这可能吗?
2 回答
更新:请参阅下面的@modifiable-lvalue 的评论以获取更多有用的信息,例如getchar()
,如果您走那条路线,请使用而不是 getch()。
绝对有可能。请注意,这gets()
可能不完全有助于此目的,因为gets()
将 enter 解释为 enter 本身,而是解释为“现在,我是用户,已经输入了我想要的尽可能多的字符串”。因此,gets()
仅按回车键收集的输入将显示为空字符串(这可能对您有用)。请参阅:http ://www.cplusplus.com/reference/cstdio/gets/ 。但是还有其他不使用gets() 的原因——它不允许您指定要读取的最大值,因此很容易溢出您正在使用的任何缓冲区。等待发生的安全和错误噩梦。所以你想要fgets()
,它允许你指定要读入的最大大小。 fgets()
当按下回车键时,将在字符串中放置一个换行符。(顺便说一句,在 fgets() 上向 @jazzbassrob 提供道具)。
您还可以考虑类似getch()
-- 它真正处理单个按键(但处理具有非直接扫描码的键有点复杂)。您可能会发现此示例很有帮助:http ://www.daniweb.com/software-development/cpp/code/216732/reading-scan-codes-from-the-keyboard 。但由于扫描码问题,getch()
以平台详情为准。
因此,如果您想要一种更便携的方法,您可能需要使用更重但相当便携的东西,例如ncurses。
我怀疑你可以用任何一个来做你想做的事fgets()
,记住 enter 会给你一个只有换行符的字符串,或者getch()
.
我只是想让您了解可能出现的一些实现/平台问题。
C 绝对可以做到这一点,但它比第一次尝试时可能猜到的要复杂一些。这是因为从历史上看,终端输入非常依赖于平台。
查看 conio.h 库及其在游戏制作中的用途。你可以用 Borland 编译。那是我在无缓冲输入和实时监听按键方面的第一次体验。当然还有其他方法。