| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:问个C++里测试键值的问题
只看楼主 加入收藏
给我毅刀
Rank: 1
等 级:新手上路
帖 子:30
专家分:9
注 册:2012-9-2
收藏
 问题点数:0 回复次数:6 
问个C++里测试键值的问题

void gotoxy(int x, int y)
{
    COORD xy={0,0};
    HANDLE h;
    h = GetStdHandle(STD_OUTPUT_HANDLE);
    xy.X=x;
    xy.Y=y;
    SetConsoleCursorPosition(h,xy);
}
void main()
{
    int ch=0;
    ch=getch();
    gotoxy(0,0);
    printf("%d",ch);
    getch();
}
大家好,我想要利用这个程序测试键值,程序无错正常执行之后呢,我想要利用他来测试上下左右的键值,但是不管按下上下左右输出的都是224这个一个值,在C++里运行的,哪位能看出来哪里错了呢,指点一下,非常感谢
这个程序是正常执行了,我按下空格是32,回车13,是不是C++的键值有些东西我没有考虑到导致出错呢?
另外如果这个程序不能执行,那么通过什么样的方法可以知道上下左右的键值呢
搜索更多相关主题的帖子: 左右 
2013-07-30 11:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
看仔细啦
When reading a function key or an arrow key, each function must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.
2013-07-30 12:06
给我毅刀
Rank: 1
等 级:新手上路
帖 子:30
专家分:9
注 册:2012-9-2
收藏
得分:0 
回复 2楼 rjsp
多谢版主了,改了一下看到了键值,但是我不明白你说的这个是什么规定啊,为什么在我第二次调用的时候才返回了上下左右的键值呢,而且我返回空格的时候两次的键值是一样的,这就说明空格是不需要的吧?那么为什么上下左右这样的键就需要我第二次输入再输出才可以输出正确的键值呢?那么第一次输出的224是什么意思呢 ?能不能说的深入一些啊,多谢了
void main()
{
    int ch=0;
    ch=getch();
    gotoxy(0,0);
    printf("%d",ch);
    ch=getch();
    printf("%d",ch);
    getch();
}
利用上面的主函数,看到了键值80,但是我将第二个getch去掉之后呢,输出的是两个224,我只有第二次按下下键的时候才看到了80,能不能解释一下这是为什么呢?多谢
2013-07-30 19:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
为什么在我第二次调用的时候才返回了上下左右的键值呢
------ 你说得蛮搞笑的。第一次和第二次都是键值,合起来才是完整的。

利用上面的主函数,看到了键值80
------ 理由同上,如果你认为向下的箭头键的键值是80的话,那大写字母P的键值是多少?如果也是80的话,系统如何区分你按下的是向下箭头键还是大写字母P?

程序代码:
#include <stdio.h>
#include <conio.h>

int main (void)
{
    int ch;
    while( (ch=getch()) != 0x1B ) // 按ESC退出
    {
        if( ch!=0x00 && ch!=0xE0 ) // 若非功能或箭头等等,只需要读取一次
        {
            printf( "%d\n", ch );
            continue;
        }
        // 否则需要读取两次
        printf( "%d %d\n", ch, getch() );
    }

    return 0;
}

2013-07-31 08:55
给我毅刀
Rank: 1
等 级:新手上路
帖 子:30
专家分:9
注 册:2012-9-2
收藏
得分:0 
回复 4楼 rjsp
请问一下,如果我需要利用一下按键的值,比如在switch语句中的case:这里写什么比较合适呢,按下下键执行相应操作的话,那么我这里写多少呢,是不是该写80呢?如果是的话,请问系统如何区别大写P和下的键值呢,看您的说法这里应该不是80吧,那么我该如何写呢比如:
int ch;
ch = getch();
switch(ch)
case 80://这个地方是否是按下下键执行操作呢
...
2013-07-31 12:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把键码拼合成16位整数比较。C库本身就有这种函数,你不知道而已,懂用_getch(),不知道_getwch()?

看你的gotoxy(),明显是用的VC,VC用的是_getch(),不是getch(),后者会给你警告提示的,看看就知道。_getwch()返回的就是wchar_t类型,而不是char。宽字符的使用,是现代C编程基本要学的,但你们的书上总仍在教char和getchar()之类,都不知道时代进步的。

授人以渔,不授人以鱼。
2013-07-31 12:42
给我毅刀
Rank: 1
等 级:新手上路
帖 子:30
专家分:9
注 册:2012-9-2
收藏
得分:0 
回复 6楼 TonyDeng
老师不教我也没有办法,只有在网上自己找一些视频看看了,这个其实是我在一个视频里看到的,gotoxy是自己写的函数,学校里教的跟不上时代,说实话我也真的很苦恼,多谢了
2013-07-31 19:11
快速回复:问个C++里测试键值的问题
数据加载中...
 
   



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

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