上篇文章我们讲了分支语句
这篇文章我来分享一下循环语句的基本内容。
while循环
首先介绍while,它的基本结构是
常见到初学者会犯一种错误,就是写成 while( );
这样就导致了程序在进入循环前就结束了,根本就没有执行循环。
while的使用场景很多,我们通过例子来了解:
break在while中的场景
在i=1,2,3,4时,都很正常执行了循环,但是i==5时,因为break跳出了循环,就终止了循环。
这边可以说明break只能跳出自己所在的那个循环,而不能跳出整个嵌套的循环。
这是break在while中的场景。
continue在while中的场景
注意这里结果不是1234,而是1234死循环。
在i==5时,continue跳过了下面的所有内容,既没有执行printf也没有执行i++,所以返回到判断部分时 i 没有++,还是i==5,再次进入......于是陷入了死循环。
这是continue在while下的场景。
下面再来看一下另一种循环 for
for 循环
因为while循环中,初始化部分、判断部分和调整部分三个部分可能位置相距较远,需要修改时难以查找,这时适合使用for循环(循环次数确定)。
使用for循环时的四个注意点
注意点1:
不要在for循环中修改循环变量,防止for循环失控
注意点2:
建议for语句的循环控制变量的取值采用“前闭后开区间” 写法。
(推荐)
(不推荐)
上面的代码更清晰,便于理解,但是也要看具体情况,哪样更容易理解就用哪样。
注意点3:
for循环中的各个部分可以省略,如for( ; ; )是可以执行的 (判断部分省略,循环恒为真,死循环),但是建议不要轻易省略,否则会出现问题,例如:
本应该打印 9 个haha的场景,这里却是打印了 3个,就是省略带来的影响。在里面的一层for循环结束时,j 的值是3,而回到外层for循环时,j 的值依然没有改变,还是3,因为没有初始化为0哪一步了,就导致无法再进入循环,所以只打印了3次。
注意点4:
break在 for 中的场景
与break在while中情形一样,都用于终止循环,但是break只能跳出自己所在的那一层循环,对于嵌套需要多个break。
continue在 for 中的场景
与while略有不同,我们来看具体例子:
这里因为判断部分(i++)在上面所以,continue跳过printf直接到判断部分,不会像在while循环中将判断部分也跳过从而陷入死循环。
do while 循环
可以看到,do while 一定会先执行一次再判断,所以它使用场景有限制。
break在 for 中的场景
与while中情形相同
continue在 for 中的场景
同样与while中情形一样,不同就在于看 判断部分放在哪里了,只要记住continue跳过它后面的代码就行了。