2012-05-04 21 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

如何读取/捕获箭头键输入? –

相关问题