1

我在 Windows XP 中的 Code :: Blocks 中运行 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;
}
4

3 回答 3

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;
        }
于 2012-05-04T11:47:17.823 回答
0

实际上 conio.h 不是 Code :: Blocks http://en.wikipedia.org/wiki/C_standard_library中不支持的标准头文件

getch() 定义仅在 conio.h 中找到,因此它显示错误 try scanf to get user input。

于 2012-05-04T11:35:31.423 回答
0

Code::Blocks(MinGW) 没有 conio.h 头文件。所以你不能使用 getch() 函数。

于 2012-05-04T11:55:57.587 回答