2012-05-04 35 views
0

我正在Windows XP中的Code :: Blocks中運行一個C程序。 我得到一個錯誤爲什麼getch()在C中拋出一個錯誤

"drawing operation is attempeted when there was no current window" 

什麼可能會導致這樣,我該如何解決呢? 我的代碼如下:

#include <stdio.h> 
#include <conio.h> 
static int get_code(void); 
// System dependent key codes 
enum 
{ 
    KEY_ESC  = 27, 
    ARROW_UP = 256 + 72, 
    ARROW_DOWN = 256 + 80, 
    ARROW_LEFT = 256 + 75, 
    ARROW_RIGHT = 256 + 77 
}; 
int main(void) 
{ 
    int ch; 
    puts("Press arrow keys, escape key + enter to exit:"); 
    while ((ch = get_code()) != KEY_ESC) 
    { 
     switch (ch) 
     { 
     case ARROW_UP: 
      printf("UP\n"); 
      break; 
     case ARROW_DOWN: 
      printf("DOWN\n"); 
      break; 
     case ARROW_LEFT: 
      printf("LEFT\n"); 
      break; 
     case ARROW_RIGHT: 
      printf("RIGHT\n"); 
      break; 
     } 
    } 
    getchar(); // wait 
    return 0; 
} 
static int get_code(void) 
{ 
    int ch = getch(); // Error happens here 
    if (ch == 0 || ch == 224) 
     ch = 256 + getch(); 
    return ch; 
} 
+0

@Vlad http://www.programmingsimplified.com/c/conio.h/getch –

+0

是的,它是conio.h –

+0

@RasmiRanjanNayak你有'conio.h'庫安裝? –

回答

1

α來自getche()輸入,它提示用戶輸入,當用戶按下一個鍵然後在標準輸出「屏幕」上輸入回顯該鍵,由於箭頭是不可打印的鍵,這就是發生了什麼你可以這樣做:

switch (ch) 
     { 
     case ARROW_UP: 
      printf("\bUP\n"); 
      break; 
     case ARROW_DOWN: 
      printf("\bDOWN\n"); 
      break; 
     case ARROW_LEFT: 
      printf("\bLEFT\n"); 
      break; 
     case ARROW_RIGHT: 
      printf("\bRIGHT\n"); 
      break; 
     } 
+0

我完全一樣謝謝A噸 –

+0

不客氣:) –

0

實際上CONIO.H是未在代碼:: Blocks的支持不是標準的頭文件 http://en.wikipedia.org/wiki/C_standard_library只在CONIO.H發現

的getch()的定義,因此顯示錯誤 嘗試scanf獲取用戶輸入。

+0

Conio.h存在於Code :: Blocks中,那麼爲什麼會出現這個錯誤? –

+0

@Jameelopix這完全不相干。 –

+0

@AhmedJolani可以在你的回答中聲明哪一個是無關的 –

0

Code :: Blocks(MinGW)沒有conio.h頭文件。所以你不能使用getch()函數。

+0

如何讀取/捕獲箭頭鍵輸入? –

相關問題