不使用';返回';在C中

不使用';返回';在C中,c,macos,C,Macos,如何从键盘获取输入,而不必在C/Mac Os中按“return”(返回),就可以在带有终端的类Unix系统上(我假设MacOS X符合条件),然后需要将终端设置为所谓的“cbreak”模式。关键是终端一直保存数据,直到按下“return”键,因此C代码无法执行任何操作,除非它指示终端不要执行此类缓冲。这通常被称为“cbreak模式”,涉及tcsetattr()函数 谷歌搜索了一下,看起来不错。一旦终端处于cbreak模式,您将能够读取标准getchar()或fgetc()调用中的数据。来自com

如何从键盘获取输入,而不必在C/Mac Os中按“return”(返回),就可以在带有终端的类Unix系统上(我假设MacOS X符合条件),然后需要将终端设置为所谓的“cbreak”模式。关键是终端一直保存数据,直到按下“return”键,因此C代码无法执行任何操作,除非它指示终端不要执行此类缓冲。这通常被称为“cbreak模式”,涉及
tcsetattr()
函数

谷歌搜索了一下,看起来不错。一旦终端处于cbreak模式,您将能够读取标准
getchar()
fgetc()
调用中的数据。

来自comp.lang.c常见问题解答:

如果您必须自己处理细节,请使用诅咒变体。如果可用,请选择“ncurses”而不是“curses”。请注意,有些键是“元”键,它们实际上只是修改基本键代码。有几种读取按键输入的“模式”,从“煮熟”到“部分煮熟”,再到“生的”。每种模式都有自己的特点,请仔细阅读文档


有时最好使用来自各种游戏编程库的现有密钥处理代码,我听说使用SDL的密钥扫描循环可以获得一些好的结果。那是很久以前的事了,所以可能有更新(更好)的工具包存在。

这是特定于操作系统的,所以如果你指出你感兴趣的操作系统,你可能会得到更好的答案。从问题正文中提到的操作系统标签中添加了操作系统标签。哇,文本实际上是说Mac操作系统。我完全没有注意到这一点:)也可以通过键入Ctrl-D强制执行“迄今为止的行”(当在空行上执行时,这将导致0个字符s可读,然后表示文件结束条件)。