可以用C语言捕获回车键吗?
我想写一个C程序,将一个字符串标记化,然后逐字缓慢地打印出来,我想让它同时监听用户按下Enter键,在这一点上,他们将能够输入数据。这可能吗?更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用可以用C语言捕获回车键吗?,c,user-input,keypress,fgets,C,User Input,Keypress,Fgets,我想写一个C程序,将一个字符串标记化,然后逐字缓慢地打印出来,我想让它同时监听用户按下Enter键,在这一点上,他们将能够输入数据。这可能吗?更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用getchar()而不是getch() 绝对有可能。请注意,gets()可能对这一目的没有完全帮助,因为gets()将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,gets()通过按enter键收集的输
getchar()
而不是getch()
绝对有可能。请注意,
gets()
可能对这一目的没有完全帮助,因为gets()
将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,gets()
通过按enter键收集的输入将显示为空字符串(这可能对您有用)。
请参阅:。
但不使用gets()还有其他原因——它不允许您指定要读入的最大值,因此很容易使正在使用的任何缓冲区溢出。一场安全和bug的噩梦即将发生。因此,您需要fgets()
,它允许您指定要读入的最大大小<当按下enter键时,code>fgets()将在字符串中放置一个换行符。(顺便说一句,fgets()上@jazzbassrob的道具)
你也可以考虑一些类似于
受平台细节的影响getch()
fgets()
,记住enter将给您一个只包含一个换行符的字符串,或者getch()
我只是想让您了解一些可能出现的实施/平台问题
C完全可以做到这一点,但它比第一次尝试时人们可能猜到的要复杂一些。这是因为从历史上看,终端输入非常依赖于平台。更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用
getchar()
而不是getch()
绝对有可能。请注意,
gets()
可能对这一目的没有完全帮助,因为gets()
将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,gets()
通过按enter键收集的输入将显示为空字符串(这可能对您有用)。
请参阅:。
但不使用gets()还有其他原因——它不允许您指定要读入的最大值,因此很容易使正在使用的任何缓冲区溢出。一场安全和bug的噩梦即将发生。因此,您需要fgets()
,它允许您指定要读入的最大大小<当按下enter键时,code>fgets()将在字符串中放置一个换行符。(顺便说一句,fgets()上@jazzbassrob的道具)
你也可以考虑一些类似于
受平台细节的影响getch()
fgets()
,记住enter将给您一个只包含一个换行符的字符串,或者getch()
我只是想让您了解一些可能出现的实施/平台问题
C完全可以做到这一点,但它比第一次尝试时人们可能猜到的要复杂一些。这是因为从历史上看,终端输入非常依赖于平台。请查看conio.h库及其在游戏制作中的使用。你可以用Borland编译。这是我第一次体验无缓冲输入和实时监听按键。当然还有其他方法 查看conio.h库及其在游戏制作中的使用。你可以用Borland编译。这是我第一次体验无缓冲输入和实时监听按键。当然还有其他方法 值得注意的是,
gets()
被认为是非常不安全的,在现代C标准中完全不推荐使用。您应该始终使用fgets
。@jazzbassrob:是的,您是对的。我应该把那样的东西放进去。我有点泄气了。当我试图将OP定位在一些看似简单的东西上时,我得到了一个很好的记忆之旅,我很高兴不再积极地写C了。@Resmar:我同意jazzbassrob的观点。如果您使用gets()路径,那么使用fgets()
,而不是真正的gets()@Resmar,您想要fgets()
的原因之一是,它至少允许您提供读取量的限制。gets()没有。因此,它完全可能受到缓冲区溢出和黑客攻击的影响。GETCHE()没有相同的问题,但有其自身的复杂性。为什么你要引用C++网站来解决C问题?我建议改为参考opengroup[gets手册][1]或更好的[fgets手册][2]。getch()是非标准的;我建议使用[getchar][3]()(并仔细阅读手册,因为该函数中也存在一些问题)。[1] :[2]:[3]:值得注意的是,gets()
被认为是极不安全的,在现代C标准中,它完全不受欢迎。您应该始终使用fgets
。@jazzbassrob:是的,您是对的。我应该把那样的东西放进去。我有点快用完了