• 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 广东11选5计划软件咋样:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 1160|回复: 8
    打印 上一主题 下一主题

    [求助] 关于C216的问题,想做一个密码锁,新人求大佬指教??!

    [复制链接]

    广东十一选五开奖图 www.guu6.com 15

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    跳转到指定楼层
    楼主
    发表于 2019-2-25 20:13 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
    LOCK.C(24): error C216: subscript on non-array or too many dimensions
    请问这是什么原因呢,
    在网上找了很多的帖子,
    有说是数组越界,
    有说是头文件的引用不对,和程序的错误,
    由于这个程序是参考书上的,我不知道怎么改,请大神指教
    下面放上代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<intrins.h>
    #include<reg52.h>
    #define uchar unsigned char
    #include<string.h>
    /*键盘扫描???/
    uchar keyscan(void)
    {
            uchar scan1,scan2,keycode,a,key,key_code;
            P1 = 0xf0;
            scan1 = P1;
            if (scan1 != 0xf0)//判断是否按下
            {
                    //delayms(10);//延时10ms
                    scan1 = P1;
                    if (scan1 != 0xf0)//二次判断是否按下
                    {
                            P1 = 0x0f;
                            scan2 = P1;
                            keycode = scan1 | scan2;//组合键扫描编码
                            for (a=0;a<16;a++ )
                                    {
                                            if(keycode == key_code[a])//查表得键值
                                                    {
                                                            key = a;
                                                            beep();
                                                            return(key);//返回有效键值
                                                    }
                                    }
                    }
            }
    else
    P1 = 0xff;
    return(key = 16);//返回无效码
    }



    问题出在红色的代码,但是我想不明白怎么修正,而且之前遇到其他的问题,改正或者删除之后又会出现更多的问题,我觉得可能是程序的错误,希望大神指教??!





    此帖出自单片机论坛

    微信图片_20190225201021.png (29.73 KB, 下载次数: 0)

    微信图片_20190225201021.png


    1328

    TA的帖子

    7

    TA的资源

    版主

    Rank: 6Rank: 6

    沙发
    发表于 2019-2-26 08:24 | 只看该作者
    key_code[]这个数组在哪里定义的?
    专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


    35

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    板凳
    发表于 2019-2-26 09:10 | 只看该作者
    首先你的数组没有定义,如果定义了你再看看你的数组是否有16个数组元素。如果没有16个,比如你只定义10个数组元素,当 if(keycode == key_code[a]),a=11时就根本查不到数组元素。


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    4
    发表于 2019-2-26 09:12 | 只看该作者
    本帖最后由 tiankai001 于 2019-2-26 09:20 编辑

    看不到数组的定义,无法判断错误原因。
    看看你的数组元素是否有16个,或者是二维数组


    15

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    5
     楼主| 发表于 2019-2-26 09:46 | 只看该作者
    懒猫爱飞 发表于 2019-2-26 08:24
    key_code[]这个数组在哪里定义的?

    原来如此,感谢指出??!


    15

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    6
     楼主| 发表于 2019-2-26 09:50 | 只看该作者
    tiankai001 发表于 2019-2-26 09:12
    看不到数组的定义,无法判断错误原因。
    看看你的数组元素是否有16个,或者是二维数组

    感谢指出??!顺便问一下,如果我这样定义数组:uchar key_code[a]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16];请问哪一种有错,或者两种都错?本人基础很差,恳请指教

    点评

    数组定义可以这样uchar key_code[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 数组定义的时候,数组元素的个  详情 回复 发表于 2019-2-26 10:27


    15

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    7
     楼主| 发表于 2019-2-26 09:50 | 只看该作者
    邱海涛qht 发表于 2019-2-26 09:10
    首先你的数组没有定义,如果定义了你再看看你的数组是否有16个数组元素。如果没有16个,比如你只定义10个数 ...

    感谢指出??!顺便问一下,如果我这样定义数组:uchar key_code[a]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16];请问哪一种有错,或者两种都错?本人基础很差,恳请指教


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    8
    发表于 2019-2-26 10:27 | 只看该作者
    落魄IV 发表于 2019-2-26 09:50
    感谢指出??!顺便问一下,如果我这样定义数组:uchar key_code[a]={0,1,2,3,4,5,6,7 ...

    数组定义可以这样uchar key_code[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    数组定义的时候,数组元素的个数要么不指定长度,然后编译环境会自动根据实际数组元素的个数分配长度。要么直接带长度,但是不能是变量。所以你这样定义uchar key_code[a]={0,1,2,3,4,5,6,7 ...是不对的。


    另外建议你看看C语言里面变量的声明和定义,声明的时候可以不定义具体数值,但是数组定义的时候,要么是在声明时定义完所有元素值,否则在程序中必须单个定义。


    15

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    9
     楼主| 发表于 2019-2-26 10:59 | 只看该作者
    tiankai001 发表于 2019-2-26 10:27
    数组定义可以这样uchar key_code[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uc ...

    十分感谢??!


    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-4-19 01:19 , Processed in 0.445265 second(s), 19 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22