c - 为什么 getch() 在 C 中抛出错误

标签 c keyboard codeblocks arrow-keys

我在 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;
}

最佳答案

α 来自 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;
        }

关于c - 为什么 getch() 在 C 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10447912/

相关文章:

const char 编译器优化

c - 为什么 CGo 不能识别我在头文件中声明的结构?

react-native - 打开键盘时 ScrollView (React Native/Expo)

c++ - 用二分法求一个数的平方根的问题

c - 相同的两个代码,但其中之一在 c [代码块]-[VS2010] 中仍然有错误

c - 舍入到更大的整数 c

c - 这个函数返回什么

Xamarin Forms - 当不存在输入控件时,物理键盘会使页面变暗

c# - 使用 C# 的半非托管代码

c++ - SDL2 - 找不到 lsdlmain 和 lsdl。代码块