Обнаружение нажатий клавиш - PullRequest
4 голосов
/ 26 августа 2010

Мне нужно обнаружить нажатие клавиши, без нажатия пользователем клавиши ввода.Какой самый элегантный способ?

Т.е. если пользователь нажимает на букву Q , не нажимая , введите , программа что-то делает.

Ответы [ 3 ]

4 голосов
/ 26 августа 2010

В 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) для более подробной информации (и, возможно, больше информации, чем вы хотели знать).

2 голосов
/ 26 августа 2010

В 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  
}
1 голос
/ 26 августа 2010

Насколько я знаю, нет хорошего способа сделать это мобильно, кроме использования библиотеки типа ncurses, которая предоставляет функцию getch(void).

Примечание. Появляется getchar(void) из stdio.h, пока не будет нажата клавиша ввода, а затем введет символы, поэтому она не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...