| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3895 人关注过本帖
标题:C 语言求键盘任意键的 ASII 码 为什么在输入上下左右键的时候 会出现其他数 ...
只看楼主 加入收藏
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:10 
C 语言求键盘任意键的 ASII 码 为什么在输入上下左右键的时候 会出现其他数字
1
#include <conio.h>
#include <stdio.h>
void main()
{
     char c;
     while(1)
     {
            c=getch();
            if(c==27) {
                break;
            }
            else
                printf( "%c: %d\n", c, c );
     }
}
图片附件: 游客没有浏览图片的权限,请 登录注册


为什么会出现 -32??
2
#include <conio.h>
#include <stdio.h>
int main()
{
    int c;
    while (27 != (c = getch()))
        printf("%d\n", c);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册



为什么会出现224??
搜索更多相关主题的帖子: include return 键盘 左右 
2014-07-22 20:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
看看下帖8楼的内容就知道为什么会有东西多出来了:
https://bbs.bccn.net/viewthread.php?tid=433843

授人以渔,不授人以鱼。
2014-07-22 20:35
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
收藏
得分:0 
回复 2 楼 TonyDeng
看的不明白   求大哥详解
2014-07-24 18:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看到我设定的每一个按键都是16位整数没有?这就是答案:按键的扫描码的确不止一个字节,所以你会遇到更多返回值的情形。

授人以渔,不授人以鱼。
2014-07-24 20:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Windows下,在使用ANSI内码编程的时候,对每个键盘按键,都要首先判断它的_getch()值是否0xE0,如果不是,则此键为单字节内码,如果是,则为双字节内码,此时必须再调用一次_getch(),才得到真正的内码。

我上面头文件中读键盘按键的方法源代码如下:
程序代码:
MyConsole::KeyCode MyConsole::ReadKeypress(void)
{
    wint_t key = _getwch();
    if (key == 0x00E0)
    {
        key = (key << 2) + _getwch();
    }
    return (static_cast<KeyCode>(key));
}


所以一套整齐的按键扫描码表,应是双字节的,哪怕是单字节的按键,也要对齐为双字节,统一处理。

[ 本帖最后由 TonyDeng 于 2014-7-24 21:35 编辑 ]

授人以渔,不授人以鱼。
2014-07-24 21:33
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:7 
讲的偏向底层了
估计楼主还坐功课了

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-07-24 22:00
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:7 
再带着中断和缓冲讲解那为最好,呵呵

梦想拥有一台龙芯3A-4000
2014-07-24 23:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有那么复杂

授人以渔,不授人以鱼。
2014-07-25 07:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
看懂5楼的代码,自己就知道怎么做了。

授人以渔,不授人以鱼。
2014-07-25 11:00
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
这代码看着都头大.C++的东西除了版主贴出来的那几页,其它的还真没看过.
程序代码:

MyConsole::KeyCode MyConsole::ReadKeypress(void)//两个MyConsole什么关系?  ::什么作用?
{
    wint_t key = _getwch();            //win_t是什么数据类型?
    if (key == 0x00E0)
    {
        key = (key << 2) + _getwch();
    }
    return (static_cast<KeyCode>(key));
}

键盘的扫描码是自定义的还是MS系统下MS定义的?

代码测试环境:  WinXP+C-Free5.0.
2014-07-31 17:35
快速回复:C 语言求键盘任意键的 ASII 码 为什么在输入上下左右键的时候 会出现 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031452 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved