1. 概述
这篇主要讲的是控制流语句是上篇C++循环的延续。控制流语句与循环语句一起工作。控制流语句让我们可以更好的控制这些循环的实际运行。我们有三个主要的控制流语句,分别是continue,break,return。它们分别做不同的事情。
continue:只能在循环中使用,基本上,continue表示如果还有下一次迭代的话,就跳过当前循环剩余代码进入这个循环的下一个迭代,如果没有下一次迭代,循环就会结束。
break:主要用于循环中,然后,它也会出现在switch语句中。这里讨论循环,break的意思是跳出循环,就是终止循环。
ruturn:使用这个会直接跳出你的函数,终止函数。如果你在一个函数中使用了return关键字,你会退出这个函数,当然函数可能需要一个返回值。如果只有return,这种适用于void函数。如果你的函数需要返回值,那么你需要为return提供一个值。
2. 案例
接上篇循环的例子
我们调整下代码
F5运行代码
可以看到打印了"Hello World"5次。
1. continue
首先,我们来使用continue
如果我们在循环体最后一行加上continue,这个实际上不会影响for循环的行为。
F5运行程序
因为,这已经是循环体的结尾了,我们没有跳过什么。
然而,如果我们在循环体的第一行加上一段代码块如下
F5运行程序
可以看到只打印了两次,从第一个开始,每两个迭代会跳过一个。一个更好的解释这个问题的方式,使用数值来记录,所以我们将每次迭代的变量i也打印出来
F5运行程序
可以看到只运行奇数迭代的打印。也就是说当i等于0时,0模2的结果是0,程序会continue,跳过了下面的日志打印。然后,i加1,1模2的结果不为0,会打印日子,以此类推。
我们这里搞简单点,如,当i > 2时,就continue
F5运行程序
可以看到,当i等于0, 1, 2都会打印日志。当i等于3, 4时,程序不会打印日志。
以上就是continue的大致内容。它的意思就是当continue被运行时,它将跳到循环的下一个迭代。
我们通过断点来调试,更深入的了解。
按下F5运行程序
数遍悬停在变量i上
可以看到这里的变量i是0,0 > 2的条件显然返回false,不会触发continue。
我们按下F10
所以他会直接打印日志。
当i等于1, 2时也一样。
然后当i等于3时
按F10
3大于2,可以看到到continue这一行了。
继续F10
可以看到到for循环的第一行,没有执行循环的里面的log函数,直接跳到了下一次迭代,然后执行i++,然后判断i < 5条件。
继续F10
如此重复。
2. break
下面,我们来看看break,将continue替换为break,并去掉断点,如下
F5运行程序
程序运行结果看上去和使用continue时一样。
然而,我们将代码改成如下
这也是使用continue时使用了的案例
按下F5运行程序
可以看到没有打印任何东西。一旦程序到达break语句,循环就结束了。
我们可以在if条件那行加上断点
F5运行程序
可以看到i等于0,也就是会走break分支
我们按下F10
继续F10
可以看到,执行完break,循环直接结束了,这就是break,完全跳出循环。
当然,这些控制流语句可以用在所有的循环语句中,因此for、while、do while循环,工作方式是一样的。
3. return
接下来来看看return语句。
我们的main函数是一个需要返回int值的函数。所以我们如果使用return,就需要为return提供一个int值。也就是我们不能直接使用return;
例如,
我们单文件编译此文件。ctrl + F7
可以看到编译报错,因为程序声明要求必须返回值。
好,我们给它返回一个值0
单文件编译此文件。ctrl + F7
编译通过了。
我们F5运行程序,会发现程序立马退出了。因为我们的程序没有运行到std::cin.get();。std::cin.get();这个语句是保持我们的窗口打开的语句,以期待我们输入东西。
我们在if条件那里加上断点
F5运行程序
我们按下F10
可以看到,程序到了return 0;那行,将要执行return语句
继续F10
可以看到,执行完return语句,程序直接跳到main函数的结尾大括号了,因为这个函数现在要结束了。
关于return语句。需要注意的是,它不仅仅可以在循环中使用。这点和continue和break不同,return可以使用在任何地方。
这些控制流语句就是控制你的代码如何流动的。循环语句和if语句一起,以及所有这些控制流语句,就是编程的基本逻辑。我们可以使用这些工具来控制程序的流程。