getch()真正得到了什么?扫描码?

Kev*_*ong 6 c console-application getch mingw32 conio

#include <conio.h>

int main (void)
{
    for (;;)
    {
        unsigned char ch = getch();
        printf ("0x%02X\n", ch);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想获得扫描码.

以下是维基百科的描述:

    Reads a character directly from the console without buffer, and without echo.
Run Code Online (Sandbox Code Playgroud)

当我按下时Del,它显示0xE0 0x53.

当我按下Ctrl+时PgUp,它显示0xE0 0x86.

虽然有些与表格相同,但它显示的大部分值都与之不同.

那么,getch()真的能获得扫描码吗?

这是扫描码表(第2组,最常用)

扫描码

Ner*_*der 0

我在 VS 2012 (C++) 中运行了一个控制台应用程序,得到了与你相同的结果。它确实说 getch() 已被弃用,我应该使用 _getch(),但这没有什么区别。

然后我在这里找到了一个与其匹配的表格(最右边的列)。对我来说,“白色”键使用 Shift 和数字键盘等效项,“灰色”键是独立的向上翻页、向下翻页等。我发现的一个差异是在数字键盘上输入的是与常规输入键相同。

http://www.itlnet.net/programming/program/Reference/msc/ng7d68f.html

我不知道这个表来自哪里,除非您单击“关于指南”,它显示“Microsoft C 数据库,版权所有 (C) 1987,作者:Peter Norton”。彼得从哪里得到的,我不知道。