Получение стрелок из cin - PullRequest
       14

Получение стрелок из cin

10 голосов
/ 08 декабря 2011

Я уверен, что об этом, должно быть, спрашивали раньше, но быстрый поиск ничего не нашел.

Как мне получить клавиши со стрелками / указателями с cin в c ++?

Ответы [ 2 ]

13 голосов
/ 08 декабря 2011

Об этом действительно спрашивали раньше, и ответ таков: вы не можете этого сделать.

C ++ не имеет понятия клавиатуры или консоли. Он знает только о непрозрачном входном потоке данных.

Ваша физическая консоль предварительно обрабатывает и буферизирует ваши действия на клавиатуре и отправляет только готовые данные в программу, обычно построчно. Чтобы напрямую общаться с клавиатурой, вам необходима библиотека обработки терминалов для конкретной платформы.

В Linux это обычно делается с библиотеками ncurses или termcap / terminfo. В Windows вы можете использовать pdcurses или, возможно, Windows API (хотя я не знаком с этим аспектом).

Фреймворки для графических приложений, такие как SDL, Allegro, Irrlicht или Ogre3D, также поставляются с полной обработкой клавиатуры и мыши.

10 голосов
/ 08 декабря 2011

Вот указатель, если вы не возражаете против использования getch(), расположенного в conio.h.

#include <stdio.h>
#include <conio.h>

#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27


int main()
{
   int KB_code=0;

   while(KB_code != KB_ESCAPE )
   { 
     if (kbhit())
      {
            KB_code = getch();
            printf("KB_code = %i \n",KB_code);

            switch (KB_code)
            {
                case KB_LEFT:
                           //Do something
                break;

                case KB_RIGHT:
                           //Do something                     
                break;

                case KB_UP:
                           //Do something                     
                break;

                case KB_DOWN:
                           //Do something                     
                break;

            }        

      }
  }

  return 0;
}
...