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

来源:互联网 发布:苏州淘宝开店培训 编辑:程序博客网 时间:2024/05/22 04:55

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,结构或类。

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

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;         }                                           }  }  



原创粉丝点击