break、continue和return的用法(附:2IO口控制4按键程序)

break语句:(循环或switch)

break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句(注意:多层循环只向外跳一层)。由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的。

注意:break语句不能用于循环语句和switch语句之外的任何其他语句中

比如:

unsigned char i, j=50;

for(i=0;i<100;i++)

{

      if(i>j) break;

}

j=i;

当程序循环到i=51时,执行break语句,跳出for循环,开始执行j=i这条语句。


continue语句:(循环)
continue语句和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代
注意:continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误!

比如:

unsigned char i, j=50;

for(i=0;i<100;i++)

{

     if(i>j) continue;

     j=i;

}

当程序循环到i=51时,执行continue语句,结束本次循环,即不执行下面的j=i语句,而是执行i++,即i=52,故i<100,循环的条件成立,循环继续执行,知道i<100的条件不成立,for循环才终止。

return语句:

return表示从被调函数返回到主函数继续执行,返回时可以附带一个返回值,返回值可以是一个常量,变量,或是表达式。

在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。

返回值表示执行的顺利与否(-1、0),返回值可以是各种数据类型,如:int、float、double、char、a【】,*a,结构或类。break、continue和return的用法(附:2IO口控制4按键程序)_第1张图片

在写下面的程序时犯过两个错误:

1、把return写错了位置,导致按键扫描到了return就退出返回了主函数,按键扫描不完整。

2:、!=的优先级大于&,这点没注意。

刚发现以下程序依然是错误的,改正后再更新吧...

#include <REG51.H>
 
 #define uint   unsigned int
 #define uchar  unsigned char
 
 sbit LED=P1^0;
 sbit P3_0=P3^0;
 sbit P3_1=P3^1;
 sbit P3_4=P3^4;
 sbit P3_5=P3^5;
 sbit P3_7=P3^7;
 
 uint keyval;
 
 //----------------------延时子函数------------------------
 void Delay_ms(uint a)	           //延时a毫秒,需要输入变量值0~65535
 {				
 	uint i;
 	while(--a!= 0)
 	{					
 		for(i = 0; i <600; i++);  //i 从0加到600,CPU大概就耗时1毫秒	
 	}
 }
 //-----------------------按键扫描子函数-------------------------------
 uchar keyscan()
 {	uchar key;
 	uchar keyscan=0x90;	//准备读取P3^4、P3^7的值,检测s1和s4
 	P3|=keyscan;
 	if((P3&keyscan)!=keyscan)  //!!!注意:!=的优先级大于&,必须加括号
 	{
 		Delay_ms(10);
 		if((P3&keyscan)!=keyscan)
 		{
 			key=(P3&keyscan);
 			if(key==0x10)
 			{
 				keyval=4;
 				return keyval;
 			 }
 			else if(key==0x80)
 			{
 				keyval=1;
 		    	return keyval;
 			 }
 			while((P3&keyscan)!=keyscan);
 		}
 	} 	
 	
 	P3_4=0;		 //P3^4、P3^7分别赋值0、1 ,检测键3
 	P3_7=1;
 	if((P3&keyscan)!=0x80)
 	{
 		 Delay_ms(10);
 		 if((P3&keyscan)!=0x80)
 		 {
 		 	 keyval=3;	
 			 while((P3&keyscan)!=0x80);
 			 	return keyval;
 		 }
 	}
 
     P3_4=1;		 //P3^4、P3^7分别赋值1、0 ,检测键2
 	P3_7=0;
 	if((P3&keyscan)!=0x10)
 	{
 		 Delay_ms(10);
 		 if((P3&keyscan)!=0x10)
 		 {
 		 	 keyval=2;	
 			 while((P3&keyscan)!=0x10);
 			 return keyval;
 		 }
 	}
 }
 void main()
 {
     while(1)
 	{	
 	    keyscan();
 		if(keyval==2)
 		{	
 			P3_0=~P3_0;		//取LED相反状态
 			Delay_ms(250);
 		    keyval=0;
         }                                          
 	}
 
 }
 
 



你可能感兴趣的:(break、continue和return的用法(附:2IO口控制4按键程序))