我需要检测按键,而无需用户按Enter键。什么是最优雅的方式?
即。如果用户点击字母 Q ,而不按输入,程序会执行某些操作。
答案 0 :(得分:4)
在unix / posix中,执行此操作的标准方法是使用tcsetattr将输入置于非规范模式:
#include <termios.h>
#include <unistd.h>
:
struct termios attr;
tcgetattr(0, &attr);
attr.c_lflag &= ~ICANON;
tcsetattr(0, TCSANOW, &attr);
有关详细信息,请参阅termios(3)手册页(可能还有比您想知道的更多信息)。
答案 1 :(得分:2)
在Windows中<conio.h>
提供了函数_getch(void)
,可用于读取击键而不回显它们(如果需要,可以自己打印)。
#include <conio.h>
#include <stdio.h>
int main( void )
{
int ch;
puts( "Type '@' to exit : " );
do
{
ch = _getch();
_putch( ch );
} while( ch != '@' );
_putch( '\r' ); // Carriage return
_putch( '\n' ); // Line feed
}
答案 2 :(得分:1)
据我所知,除了使用提供ncurses
功能的getch(void)
这样的库之外,没有好办法可以这么做。
注意:来自getchar(void)
的{{1}}似乎等到按下回车键然后输入你的字符,否则它将无效。