1

可能重复:
如何避免使用任何 getchar() 按下回车键

我需要在控制台 Objective-C 应用程序中按下键盘键而不按“Enter”按钮

此代码仅在我按“Enter”后才读取按键代码

int key;
key=getchar();
NSLog(@"%i", key);

我需要这样的东西,但不按“Enter”。我怎样才能做到这一点?

4

1 回答 1

2

默认情况下,控制台处于“规范”模式,它对输入进行大量处理,并且在遇到新行之前不会将其传递给进程的打开文件描述符。您想stdin进入“非规范”模式,以获取到达时的字节:

#include <termios.h>

struct termios terminal_info;
tcgetattr(STDIN_FILENO, &terminal_info);
terminal_info.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, terminal_info);

(您也应该检查tcgetattr()and返回的错误tcsetattr()。)

于 2013-01-04T11:46:54.657 回答