分支语句,条件满足则执行,条件不满足则跳过,但是这个语句只执行一次。但我们生活中的很多实例是,很多同一件事是要完成很多次的。所以循环语句应用而生。这就是我们今天主要要聊的内容——循环语句。
循环语句
while
while语句的语法结构跟if语句的结构基本上一致,嗯,就是把if换成while就成了。
while(表达式)
循环语句
很简单吧,那让我们再了解一下while中的break和continue
break
break在循环中的用处是直接 永久 终止循环。即在循环(不论是哪种循环语句)中只要遇到break,就停止执行后期循环中的所有语句。
来,举例子
没有break时的输出情况
int main()
{
int i = 1;
while (i <= 10)
{
/*if (5 == i)
break;*/
printf("%d ", i);
i++;
}
return 0;
}
取消对break注释后的输出情况
continue
continue是用于终止本次循环的,即在循环中遇见continue,其后的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环。
我们继续用上面的那个例子来说明
乍眼看过去,似乎好像是跟break的输出效果是一样的啊,嘿嘿,再仔细看看,大有不同,continue的输出结果中4后的光标还在闪,也没有那段常常的结束语,所以啊,这个循环并没有结束,而是陷入了死循环。
因为,当i==5时,continue跳出本次循环,不再执行i自增,i就一直等于5,一直满足条件i<=10,循环也就一直不能结束。
到此,while我们基本上就聊完了,那就进入下一个循环语句吧
for
已经有while,为什么还要引入for呢?不知道大家有没有这个疑问,那我们就先来聊聊for的优势,引入for绝对不是多此一举。
首先从for的语法结构讲起,并与while做个对比,就明白了
for(表达式1;表达式2;表达式3;)//注意括号外没有";",若有会导致死循环,
//但每个表达式后必须有";",即便语句省略
循环语句;
表达式1是初始化部分,用于初始化循环变量,这也就是说在你定义变量时所初始化的值并不重要,不会影响你的循环,但是while就不一样了,定义变量时的初始化就是while循环的初始化。
表达式2为条件判断部分,用于判断循环什么时候终止,相当于是while后()里的内容
表达式3为调整部分,用于循环的调整,而while的调整部分再大括号里,这也就是为什么continue在while与for中输出结果不同的原因(下面我们会降将到)
举个简单的例子来对比一下
int i = 1;//初始化部分
while (i <= 10)//判断部分
{
printf("haha\n");
i++;//调整部分
实现相同的功能,用for
for (i = 1; i <= 10; i++)
printf("haha\n");
是不是就简洁很多。可能随着你的能力越来越强,代码也会越来越长,在while循环中,初始化、判断、调整这三个部分就偏离的比较远,不方便后期的查找与修改。而在for循环中,这三个部分集中在一起,这样查找修改就很集中和方便。这样看来,for的循环风格就更略胜一筹,for的使用频率也是最高的。
按照while的套路来讲,现在我们应该进入break和continue环节了
break
我们继续用上面的那个例子来说明
仔细对比,发现这与while的输出结果一样啊,确实,是一样的。那我们就不赘述了。
continue
还是一样沿用上面的例子,嘿,这一个例子可以贯穿全文
这确实就与while中的continue的输出结果不同了,因为在for中调整部分不在continue的后面,continue跳出本次循环来到的是for括号后面的i++,调整部分。
至此,for也就基本上聊完了,哦对了,还有一些小小的建议:
- 尽量不要在for循环体内修改变量,防止for循环变量失去控制
- 建议for语句的循环控制变量的取值采用“前闭后开区间”的写法
for (i = 0; i < 10; i++)//前闭后开的写法,可不要先看这样写,
//这个10不简单,它是有意义的,它是循环的次数,
- 刚开始不要随便省略初始化、判断、调整部分,虽然理论上是可以的
比如
由两张图知道,随意的省略带来的结果并不一样,第二张图中省略了初始化部分,这样当i==2时,j没有初始化为0,还是3,不满足条件,循环就结束了,所以就只输出3个haha。
do-while
语法结构
do
循环语句;
while(表达式);//注意此处有;
由它的语法结构可知do循环的特点:循环至少执行一次,do-while的使用场景有限,所以不是很常用
do-while中的break与continue
break
continue
至此,循环语句的三种语法结构都讲完了。希望能对大家有所帮助