簡體   English   中英

為什么getch()在C中引發錯誤

[英]Why getch() is throwing an error in C

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

實際上conio.h不是標准的頭文件,而代碼::塊http://en.wikipedia.org/wiki/C_standard_library不支持

getch()定義僅在conio.h中找到,因此它顯示錯誤,請嘗試用scanf獲取用戶輸入。

Code :: Blocks(MinGW)沒有conio.h頭文件。 因此,您不能使用getch()函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM