【发布时间】:2020-09-02 12:41:49
【问题描述】:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char ch;
printf("Enter any character: \n");
ch = fgetc(stdin);
if(ch == 'A')
{
printf("A was inputed.\n");
}
else
{
printf("%c was inputed.\n", ch);
}
return 0;
}
所以这是一个简单的程序:当你输入 A 并按下回车键时,“A was inputed”会打印出来。如果您输入任何其他字符,它将打印“已输入。”
但我想这样:当右箭头键按下时,它会打印“右箭头键”,但是当左箭头键按下 >,它将打印“左箭头键”。
我该怎么做?
我可以用回车键来做这个。
if(ch == 0x0A)
{
printf("ENTER KEY was pressed\n");
}
else
{
}
我了解到 0x0A 是回车键的十六进制 ASCII 值。所以我想在我得到它们的十六进制 ASCII 值后,我可以对其他键做同样的事情。但我不知道右箭头和左箭头键的那些。
编辑:我应该提到我使用的是 Windows 10。
【问题讨论】:
-
以下链接可能会有所帮助:stackoverflow.com/questions/2876275/…
-
还有缓冲问题。我认为我们不能假设 fgetc() 会在单次击键后立即返回。如果这是 Linux 和标准终端仿真器,我有可以处理这些问题的示例代码。如果是 Linux,ncurses 提供了易于理解的方法来处理键码转换和缓冲。
-
如果您在 Windows 上,或者针对 Windows,我建议使用 WinApi docs.microsoft.com/en-us/windows/win32/learnwin32/… 它们允许您检测所有听起来像您想要的键(据我所知)。在 linux 上,您可能必须通过 ASCII 键(或者如果在给定系统上可用的函数)
-
您使用的是什么操作系统?