2011-12-08 35 views
9

我确信这个问题以前一定是问过的,但是快速搜索没有发现任何东西。从cin获取方向键

如何在C++中使用cin获取箭头/方向键?

回答

12

它的确曾被问过,答案是你不能这样做。

C++没有键盘或控制台的概念。它只知道一个不透明的输入数据流。

您的物理控制台会预处理和缓冲您的键盘活动,并且通常只是逐行地将已煮熟的数据发送到程序。为了直接与键盘通话,您需要一个特定于平台的终端处理库。

在Linux上,这通常使用ncursestermcap/库来完成。在Windows上,您可以使用pdcurses,也可以使用Windows API(虽然我不熟悉该方面)。

SDL,Allegro,Irrlicht或Ogre3D等图形应用程序框架也具有全键盘和鼠标处理功能。

+7

你确实很幸运,你不熟悉winAPI。无知是幸福! :) – FailedDev

+1

@FailedDev:嘿嘿 - 我知道了一点,我已经看到了我的匈牙利绕口令和LPHANDLE的份额:-)我从来没有见过任何与原始终端处理有关的东西......感觉随意点赞一些指针! :-) –

+0

:)也没有做过这样的事情,虽然我相信这是可能的。但是OP似乎并没有对特定的操作系统感兴趣,尽管他应该:) – FailedDev

10

这里是一个指针,如果你不介意使用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; 
}