getchar()而不按'enter'按钮

时间:2013-01-04 11:33:07

标签: objective-c c console-application

  

可能重复:
  How to avoid press enter with any getchar()

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

此代码仅在我按“Enter”

后才会读取按下的键码
int key;
key=getchar();
NSLog(@"%i", key);

我需要这样的东西,但不要按'Enter'。 我怎么能这样做?

1 个答案:

答案 0 :(得分: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()tcsetattr()返回的错误。)