C语言学习---实现几个优先级的几种方法

需求是针对不同的控制变量实现不同的响应需求,但是存在一个优先级的问题。

如果是只满足0 > 5 > 6 > 7 > 8的话,可以用continue。注意运用continue和break的区别。

break用于完全结束一个循环,跳出循环体执行循环后面的语句。

continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。

while循环break是用于永久终止循环。即不执行本次循环中break后面的语句,直接跳出循环。 

while循环continue是用于终止本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。

因此在while(1)的时候要尤其的注意。如果用到了break的话就直接跑飞出去了。

或者直接看这个流程图就啥都懂了。

这里记录一下如果是只满足0 > 5 > 6 > 7 > 8的代码。

if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
	DRM0;
	test[0] ++;
	continue;
}

if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
	DRM5;
	test[5] ++;
	continue;
}

if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
	DRM6;
	test[6] ++;
	continue;
}

if(adc_value[3] > 0.2 && adc_value[3] < 0.9)
{
	DRM7;
	test[7] ++;
	continue;
}

if(adc_value[4] > 0.2 && adc_value[4] < 0.9)
{
	DRM8;
	test[8] ++;
	continue;
}

注意这个时候continue是只循环后面的语句也不再执行了,因此当有需要延时的话延时就放在上面好了。

当然也可以用用if  else if的结构来写,if else if是当if满足的情况下,后面的else if就不会再判断再执行了。这一点需要注意。

代码如下:

if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
	DRM0;
	test[0] ++;
}
else if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
	DRM5;
	test[5] ++;
}
else if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
	DRM6;
	test[6] ++;
}
else if(adc_value[3] > 0.2 && adc_value[2] < 0.9)
{
	DRM7;
	test[7] ++;
}
else if(adc_value[4] > 0.2 && adc_value[2] < 0.9)
{
	DRM8;
	test[8] ++;
}

另外,当把1234再加进来的话,就需要满足0的优先级最大,然后 5 > 6 > 7 > 8;1 >2 > 3 > 4.

代码如下:

if(AD0)
{
	DRM0;
}
else if(AD1)
{
	DRM5;
	if(AD2)
	{
		DRM2;
	}
	else if(AD3)
	{
		DRM3;
	}
	else if(AD4)
	{
		DRM4;
	}		
}
else if(AD2)
{
	DRM6;
	if(AD1)
	{
		DRM1;
	}
	else if(AD3)
	{
		DRM3;
	}
	else if(AD4)
	{
		DRM4;
	}	
}
else if.......

开玩笑的,这还没写完,这样写估计要被别人锤死了。

代码如下:

if(adc_value[0] < 0.2 || adc_value[0] > 1.0)
{
	DRM0;
	test[0] ++;
	continue;
}

if(adc_value[1] > 0.2 && adc_value[1] < 0.9)
{
	DRM5;
	test[5] ++;
}
else if(adc_value[2] > 0.2 && adc_value[2] < 0.9)
{
	DRM6;
	test[6] ++;
}
else if(adc_value[3] > 0.2 && adc_value[2] < 0.9)
{
	DRM7;
	test[7] ++;
}
else if(adc_value[4] > 0.2 && adc_value[2] < 0.9)
{
	DRM8;
	test[8] ++;
}

if(adc_value[1] < 0.2)
{
	DRM1;
	test[1] ++;
}
else if(adc_value[2] < 0.2)
{
	DRM2;
	test[2] ++;
}

else if(adc_value[3] < 0.2)
{
	DRM3;
	test[3] ++;
}
else if(adc_value[4]< 0.2)
{
	DRM4;
	test[4] ++;
}

另外还可以用goto还解决,不过这个不要经常用,难以维护。

代码如下:

if(adc_value[0] < 200 || adc_value[0] > 1000)
{
//			//DRM0;
			test[0] ++;
			goto test2;
}
if(adc_value[1] > 200 && adc_value[1] < 900)
{
//			//DRM5;
	test[5] ++;
	goto test1;
}
if(adc_value[2] > 200 && adc_value[2] < 900)
{
//			//DRM6;
	test[6] ++;
	goto test1;
}
if(adc_value[3] > 200 && adc_value[3] < 900)
{
//			//DRM7;
	test[7] ++;
	goto test1;
}
if(adc_value[4] > 200 && adc_value[4] < 900)
{
//			//DRM8;
	test[8] ++;
	goto test1;
}
		
test1:
if(adc_value[1] < 200)
{
//			//DRM1;
	test[1] ++;
	goto test2;
}
if(adc_value[2] < 200)
{
//			//DRM2;
	test[2] ++;
	goto test2;
}
if(adc_value[3] < 200)
{
//			//DRM3;
	test[3] ++;
	break;
}
if(adc_value[4]< 200)
{
//			//DRM4;
	test[4] ++;
	goto test2;
}
		
test2:
		//delay 1s
		Timer_Wait(1000); 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值