9900|8

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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

LOCK.C(24): error C216: subscript on non-array or too many dimensions
请问这是什么原因呢,
在网上找了很多的帖子,
有说是数组越界,
有说是头文件的引用不对,和程序的错误,
由于这个程序是参考书上的,我不知道怎么改,请大神指教
下面放上代码:

#include
#include
#include
#include
#define uchar unsigned char
#include
/*键盘扫描模块*/
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
此帖出自单片机论坛

最新回复

数组定义可以这样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语言里面变量的声明和定义,声明的时候可以不定义具体数值,但是数组定义的时候,要么是在声明时定义完所有元素值,否则在程序中必须单个定义。   详情 回复 发表于 2019-2-26 10:27
点赞 关注(1)
 

回复
举报

1371

帖子

6

TA的资源

版主

沙发
 
key_code[]这个数组在哪里定义的?
此帖出自单片机论坛
 
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
首先你的数组没有定义,如果定义了你再看看你的数组是否有16个数组元素。如果没有16个,比如你只定义10个数组元素,当 if(keycode == key_code[a]),a=11时就根本查不到数组元素。
此帖出自单片机论坛
 
 
 

回复

6366

帖子

4917

TA的资源

版主

4
 
本帖最后由 tiankai001 于 2019-2-26 09:20 编辑

看不到数组的定义,无法判断错误原因。
看看你的数组元素是否有16个,或者是二维数组
此帖出自单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

5
 
懒猫爱飞 发表于 2019-2-26 08:24
key_code[]这个数组在哪里定义的?

原来如此,感谢指出!!
此帖出自单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

6
 
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
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

7
 
邱海涛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];请问哪一种有错,或者两种都错?本人基础很差,恳请指教
此帖出自单片机论坛
 
 
 

回复

6366

帖子

4917

TA的资源

版主

8
 
落魄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语言里面变量的声明和定义,声明的时候可以不定义具体数值,但是数组定义的时候,要么是在声明时定义完所有元素值,否则在程序中必须单个定义。
此帖出自单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

9
 
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 ...

十分感谢!!
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表