这实际上取决于您的标准库(很可能来自您的编译器)。因此,从操作系统到操作系统,从编译器到编译器,您将得到的东西非常多。
您的标准库需要操作系统调用来读取密钥。然后它将从操作系统返回的值转换为从 C 标准输入返回的值。有些映射像 AZ 一样简单,但其他的像 F1-F12、向上/向下翻页和 ALT 键则不是。
大多数人都同意以下几点:
- AZ 映射到 ASCII 65-90
- az 映射到 ASCII 97-122
- 0-9 映射到 ASCII 48-57
- 标准标点符号映射到它们存在的 ASCII (.,"! 等)
- 控制 AZ 映射到 ASCII 控制代码 1-26
- Return/Enter 映射到 ASCII 13
- ESC 映射到 ASCII 27
- TAB 映射到 ASCII 9
大多数时候他们也同意这些:
- 退格映射到 ASCII 8
- 删除映射到 ASCII 127
这就是为什么您有时会为某些键而不是所有键获得值的原因。
根据您的函数调用 getche() 和标签 turboc++,我怀疑您使用的是 Turbo C++。Turbo C++ 使用旧的 DOS 方法(正如 GWBasic 和 DOS 时代的许多其他程序一样)。
在 DOS 方法中,您将得到一个 0,后跟第二个字符,即按下的键。因此,您将读取标准输入,如果它是 0 再次读取标准输入,然后将该代码作为 switch 语句中按下的键来处理。
例如左箭头是“\0”后跟一个“K”。
下面是一些使用 DOS 方法的常用键。
a=getche();
if(a==0)
{
a=getche();
switch(a)
{
case 'H': printf("Up arrow\n");break;
case 'P': printf("Down arrow\n";break;
case 'K': printf("Left arrow\n";break;
case 'M': printf("Right arrow\n";break;
case ';': printf("F1\n";break;
case '<': printf("F2\n";break;
case '=': printf("F3\n";break;
case '>': printf("F4\n";break;
case '?': printf("F5\n";break;
case '@': printf("F6\n";break;
case 'A': printf("F7\n";break;
case 'B': printf("F8\n";break;
case 'C': printf("F9\n";break;
case 'D': printf("F10\n";break;
case 133: printf("F11\n";break;
case 134: printf("F12\n";break;
case 'R': printf("Ins\n";break;
case 'S': printf("Del\n";break;
case 'G': printf("Home\n";break;
case 'O': printf("End\n";break;
case 'I': printf("PgUp\n";break;
case 'Q': printf("PgDn\n";break;
default:
printf("Unknown\n");
}
}