• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

遇到逻辑判断难题,求指导。(需要判断3组数据都可以解锁问题)

存储里保存的3组密码:1:mima_x[k]    2:mima_y[k]   3: mima_z[k]

现在键盘输入的数据: a[k]

原意是要求判断键盘输入的数据a[k]是否对的上存储里的3组密码中的任意一组,应该怎么做?我下面程序怎么不对,比如第1组密码是1234,我键盘输入1234可以解锁,但是输入123也可以解锁,输入12也可以解锁,输入1的时候不能解锁,问题出自哪???只用一组的时候是正确的,就是后面被我注释掉的,只用一组的时候必须正确输入1234才可以解锁,少了或多了或错了一个都不行。为什么用2组不行,3组也不行?难道是“或”运算符不可以这样判断吗?(jm就是解锁成功标记,2组或3组程序时,数据不对也会led7=0,如果不对不是应该执行led1=0吗?)

   for(k=0;k<11;k++)
     {
      if((a[k]==mima_x[k])||(a[k]==mima_y[k])||(a[k]==mima_z[k])){jm=1;continue;}//if((a[k]==mima_x[k])){jm=1;continue;}
      if((a[k]!=mima_x[k])||(a[k]!=mima_y[k])||(a[k]!=mima_z[k]))//if((a[k]!=mima_x[k]))	
	 { //如果键盘输入数据对不上存储里的3组任意一组,就执行这里
	  led1=0;jm=0;
	  goto start;
	 }
     } 	  	   			  
  if(jm==1)
     { //如果键盘输入数据能对上存储里的3组任意一组,就执行这里				
      led7=0;jm=0;
     }
谁能帮我分析一下,假如1:mima_x[k]={1,2,3,4}    2:mima_y[k]={5,6,7,8}   3: mima_z[k]={8,8,8,8}。然后这时键盘输入数据 a[k]={1,2,3}的时候上面程序结果是什么样的吗?

全部回复(6)
正序查看
倒序查看
2014-05-17 14:16
这样不科学,最好是一位一位的去进行对比会好些,这样很容易出错!
0
回复
2014-05-17 14:18
@yueyunno1
这样不科学,最好是一位一位的去进行对比会好些,这样很容易出错!
用数组也最好是一位一位的对比,把所有位全部对比完!
0
回复
fzhlpp
LV.7
4
2014-05-17 18:55
@yueyunno1
用数组也最好是一位一位的对比,把所有位全部对比完!
我那个for循环就是逐位对比的啊,我只用1组的时候也是这样for循环比对的,那样正常的。不用for循环那要用什么样的语句可以一位一位比对呢?比如。。。?
0
回复
fzhlpp
LV.7
5
2014-05-18 18:34

现在已经把功能做出来了,达到了预期目的,不过这样语句就多了许多,显得复杂了,还是希望用更简单的最少的代码就能解决,期待高手出手。下面给出我现在的方案:

先在全局里定义3个判断各位都正确比对标记用的寄存器,初始值为0.

uchar x=0,y=0,z=0, jm=0;

然后再每组分开判断,在每组判断里如果密码正确就置位解密正确标记,否则保持解密正确标记为0.

for(k=0;k<11;k++)
     {
      if((a[k]==mima_x[k]){x++;if(x==11)jm=1;}//只有11次全部比对正确jm才等于1
      if(a[k]==mima_y[k]){y++;if(y==11)jm=1;}
      if(a[k]==mima_z[k]){z++;if(z==11)jm=1;}

      if((k==11)&&(jm== 0))	//k==11是要for循环11次后再判断jm
	 { //如果键盘输入数据对不上存储里的3组任意一组,就执行这里
	  led1=0;jm=0;x=0;y=0;z=0;
	  goto start;
	 }
     } 	  	   			  
  if(jm==1)
     { //如果键盘输入数据能对上存储里的3组任意一组,就执行这里				
     jm=0;x=0;y=0;z=0; led7=0;jm=0;
     }

0
回复
2014-05-20 08:54
@fzhlpp
现在已经把功能做出来了,达到了预期目的,不过这样语句就多了许多,显得复杂了,还是希望用更简单的最少的代码就能解决,期待高手出手。下面给出我现在的方案:先在全局里定义3个判断各位都正确比对标记用的寄存器,初始值为0.ucharx=0,y=0,z=0,jm=0;然后再每组分开判断,在每组判断里如果密码正确就置位解密正确标记,否则保持解密正确标记为0.for(k=0;k

程序基本就是这个思路,但是尽量不要用goto强制跳转语句!

0
回复
fzhlpp
LV.7
7
2014-05-20 18:35
@yueyunno1
程序基本就是这个思路,但是尽量不要用goto强制跳转语句!
今天公司同事才刚说起这goto语句,网上也好多说起建议尽量不要使用,为什么呢?比如。。。
0
回复