【发布时间】:2013-01-04 11:33:06
【问题描述】:
我需要在控制台 Objective-C 应用程序中按下键盘按键而不按“Enter”按钮
此代码仅在我按“Enter”后才会读取按键代码
int key;
key=getchar();
NSLog(@"%i", key);
我需要这样的东西,但没有按“Enter”。 我该怎么做?
【问题讨论】:
标签: objective-c c console-application
我需要在控制台 Objective-C 应用程序中按下键盘按键而不按“Enter”按钮
此代码仅在我按“Enter”后才会读取按键代码
int key;
key=getchar();
NSLog(@"%i", key);
我需要这样的东西,但没有按“Enter”。 我该怎么做?
【问题讨论】:
标签: objective-c c console-application
默认情况下,控制台处于“规范”模式,它对输入进行大量处理,并且在遇到新行之前不会将其传递给进程的打开文件描述符。您想将 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() 返回的错误。)
【讨论】: