社区导航

 

搜索
查看: 1220|回复: 8

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

[复制链接]

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


回复

使用道具 举报

1337

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时就根本查不到数组元素。


回复

使用道具 举报

7491

TA的帖子

4951

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

发表于 2019-2-26 09:12 | 显示全部楼层
本帖最后由 tiankai001 于 2019-2-26 09:20 编辑

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


回复

使用道具 举报

15

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2019-2-26 09:46 | 显示全部楼层
懒猫爱飞 发表于 2019-2-26 08:24
key_code[]这个数组在哪里定义的?

原来如此,感谢指出!!


回复

使用道具 举报

15

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 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

 楼主| 发表于 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];请问哪一种有错,或者两种都错?本人基础很差,恳请指教


回复

使用道具 举报

7491

TA的帖子

4951

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

发表于 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

 楼主| 发表于 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-5-24 08:47 , Processed in 0.256891 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表