2014-10-12 76 views
1

我所限定的四個箭頭鍵作爲such-檢測爲雙方向上和向右C++,向上箭頭

#define UP_ARROW 72 
#define LEFT_ARROW 75 
#define DOWN_ARROW 80 
#define RIGHT_ARROW 77 

並且鍵正在使用_getch()檢查,因爲這樣的

char key = _getch(); 
if (key == 0 || key == -32) 
{ 
    key = _getch(); 
    switch (key) 
    { 
    case UP_ARROW: 
     //These are functions not relevant to the problem 
     //up(1); 
    case DOWN_ARROW: 
     //down(1); 
    case LEFT_ARROW: 
     //left(1); 
    case RIGHT_ARROW: 
     //right(1); 

     //Pressing up will print out "test", which should not happen 
     printf("test"); 
    } 
} 

作爲評論說,按下會在RIGHT_ARROW情況下調用任何東西。我做錯什麼了嗎?

回答

4

您需要一個break;語句來停止開關的繼續。

可以使用break語句結束switch語句中的特定情況 的處理,並跳轉到開關 語句的結束。如果沒有中斷,程序會繼續執行下一個案例, 執行語句,直到到達中斷或語句結束爲 。在某些情況下,這種延續可能是可取的。

http://msdn.microsoft.com/en-us/library/66k51h7a.aspx

3

沒有break,該case語句運行所有通過:

case UP_ARROW: 
    //up(1); 
    break;  //here 
case DOWN_ARROW: 
    //down(1); 
    break;  //and here 
3

我曾經用它作爲: -

#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; 
} 
相關問題