如何判断是否按下Esc、shift等按键?

吾子墨鸿 2011-08-08 09:28:26
关于这个问题看了一晚上帖子没看明白,主要是用c语言实现,不用windows的函数。
这样写:

int main()
{
int key;

while(1)
{
key=getchar();
if (key == '\033') //按了ESC键
{
printf("0x%x\n",key);
break;
}
else
{
printf("0x%x\n",key); //*打印出各键对对应的键值
}
}

return 0;
}

这个根本不行,只能打印出来字母数字等,想打印esc、shift、tab等键根本不行。
请高手帮忙看一看怎么弄,最好给一个可以正确执行的实例小程序,感激不尽!
...全文
1491 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhhh0123 2011-08-09
  • 打赏
  • 举报
回复
标准C只规定了一些最基本的东西。

要做出一些实用的东西,还得使用依赖于系统和开发环境的内容。


《C专家编程》一书有关于getch问题的论述。
tompaz 2011-08-09
  • 打赏
  • 举报
回复
GetKeyState(VK_CONTROL)
windows提供了这个
AnYidan 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shiweifu 的回复:]
简单点判断ASCII码,高级点键盘钩子
[/Quote]
++
吾子墨鸿 2011-08-09
  • 打赏
  • 举报
回复
多谢各位的回答,这下明白了!
shiweifu 2011-08-08
  • 打赏
  • 举报
回复
简单点判断ASCII码,高级点键盘钩子
gz_qmc 2011-08-08
  • 打赏
  • 举报
回复
TC/VC都可以
#include "conio.h"

void main()
{
char key;

while(1)
{
key=getch();
if(key=='Q'||key=='q') break;
else printf("\n0x%02x",key);
}
}


TC/WinTC
#include "bios.h"

void main()
{
int key;

while(1)
{
key=bioskey(0);
if(key==0x3920) break; /*空格键退出*/
else printf("\n0x%04x",key);
}
}
gz_qmc 2011-08-08
  • 打赏
  • 举报
回复
包含
#include "conio"
用getch()
老子最恨用getchar的.这种用途,明显是不要回显,总是弄个有回显的东西来

char ch=getch();

ESC 十进制的27
if(ch==27) 表示按下了ESC键盘
表示方法很多

比如回车:
if(ch=='\r') 也可以
if(ch==0x0D) 也可以
if(ch==13) 也可以
其实都是一回事情
辰岡墨竹 2011-08-08
  • 打赏
  • 举报
回复
bioskey是TC里的,getch()可以在TC和VC里用,但是并不属于C标准。
至善者善之敌 2011-08-08
  • 打赏
  • 举报
回复
int main()
{
int key;

while(1)
{
key=getch(); //这里
if (key == '\033') //按了ESC键
{
printf("0x%x\n",key);
break;
}
else
{
printf("0x%x\n",key); //*打印出各键对对应的键值
}
}

return 0;
}

记得加#include <conio.h>
lengwuqin 2011-08-08
  • 打赏
  • 举报
回复
key=bioskey(0);
换成这句话试试,前面加上这句话#define ESC 0x011b
乔巴好萌 2011-08-08
  • 打赏
  • 举报
回复
DOS/Windows中getchar函数无法读取到ESC。
当你调用getchar时,系统会要求你输入一行字符,然后保存到缓冲区中,并返回第一个字符。以后再调用getchar的话,如果缓冲区中有字符,则返回一个字符;如果缓冲区中的字符都被返回了,则要求你再输入一行。每次缓冲一行的数据,这就是所谓的行缓冲。
问题就再这个“输入一行”了。DOS/Windows系统中,输入一行时如果按ESC,表示“本次输入作废,重新输入一行”。要让输入的行不作废也就只有不按ESC。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧