Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以用C语言捕获回车键吗?_C_User Input_Keypress_Fgets - Fatal编程技术网

可以用C语言捕获回车键吗?

可以用C语言捕获回车键吗?,c,user-input,keypress,fgets,C,User Input,Keypress,Fgets,我想写一个C程序,将一个字符串标记化,然后逐字缓慢地打印出来,我想让它同时监听用户按下Enter键,在这一点上,他们将能够输入数据。这可能吗?更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用getchar()而不是getch() 绝对有可能。请注意,gets()可能对这一目的没有完全帮助,因为gets()将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,gets()通过按enter键收集的输

我想写一个C程序,将一个字符串标记化,然后逐字缓慢地打印出来,我想让它同时监听用户按下Enter键,在这一点上,他们将能够输入数据。这可能吗?

更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用
getchar()
而不是getch()


绝对有可能。请注意,
gets()
可能对这一目的没有完全帮助,因为
gets()
将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,
gets()
通过按enter键收集的输入将显示为空字符串(这可能对您有用)。 请参阅:。 但不使用gets()还有其他原因——它不允许您指定要读入的最大值,因此很容易使正在使用的任何缓冲区溢出。一场安全和bug的噩梦即将发生。因此,您需要
fgets()
,它允许您指定要读入的最大大小<当按下enter键时,code>fgets()将在字符串中放置一个换行符。(顺便说一句,fgets()上@jazzbassrob的道具)

你也可以考虑一些类似于 GGCHE()/<代码>的方法,它确实处理单个按键(但是处理复杂的有非直接扫描代码的键)有点复杂。您可能会发现此示例很有用:。但由于扫描码问题,

getch()
受平台细节的影响

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

我想您可以使用
fgets()
,记住enter将给您一个只包含一个换行符的字符串,或者
getch()

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


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

更新:请参阅下面@modifiable lvalue的注释,以获取其他有用信息,例如,如果您使用该方法,请使用
getchar()
而不是getch()


绝对有可能。请注意,
gets()
可能对这一目的没有完全帮助,因为
gets()
将enter本身解释为enter,而不是“现在,我是用户,已经输入了我想要的字符串”。因此,
gets()
通过按enter键收集的输入将显示为空字符串(这可能对您有用)。 请参阅:。 但不使用gets()还有其他原因——它不允许您指定要读入的最大值,因此很容易使正在使用的任何缓冲区溢出。一场安全和bug的噩梦即将发生。因此,您需要
fgets()
,它允许您指定要读入的最大大小<当按下enter键时,code>fgets()将在字符串中放置一个换行符。(顺便说一句,fgets()上@jazzbassrob的道具)

你也可以考虑一些类似于 GGCHE()/<代码>的方法,它确实处理单个按键(但是处理复杂的有非直接扫描代码的键)有点复杂。您可能会发现此示例很有用:。但由于扫描码问题,

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:是的,您是对的。我应该把那样的东西放进去。我有点快用完了