检测击键

时间:2010-08-26 00:17:20

标签: c

我需要检测按键,而无需用户按Enter键。什么是最优雅的方式?

即。如果用户点击字母 Q ,而不按输入,程序会执行某些操作。

3 个答案:

答案 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}}似乎等到按下回车键然后输入你的字符,否则它将无效。