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