前言
今天我们讲的是控制流语句,本期内容是上期课程的延续。
控制流语句一般与循环语句一起工作,它们让我们可以更好的控制这些循环的实际运行。
我们有三个主要的控制流语句可以使用,continue 、break 和 return,它们有不同的功能。
- continue 只能在循环中使用,它表示 进入这个循环的下一个送代(前提是:如果还有下一次迭代,如果没有,循环就会结束)。
- break 主要用于循环中,它也会出现在 switch 语句中,break 意思是要跳出循环,也就是终止循环。
- return 应该是最有 ''力量'' 的一个语句,因为 return 会完全 ''脱离'' 你的函数,如果你在一个函数中碰到了一个 return 关键字,程序运行会退出这个函数,当然函数可能需要一个返回值,如果只有 return 本身,你只能返回 return 本身,return 本身只适用于 void 函数,如果你的函数需要返回值的话,它需要提供一个返回值。
我们来看一个实际的例子。下面是一段我们之前使用过的程序。
#include <iostream>
int main(int argc, const char** argv)
{
for(int i = 0; i <5; i++)
{
std::cout << i<< ":\tHello, World!\n";
}
return 0;
}
我们那代码进行编译执行,毫无疑问,会打印五次hello world
continue
我们的第一个控制流语句,是continue。
continue 将跳到 for 循环的下一个迭代,如果我按照下面的方式修改,它将不会影响 for 循环的行为,因为这个位置已经是 for 循环的结尾了,前面该执行的代码也执行完了。
当程序运行到第八行时,不管怎样,这一行会继续到下一次送代,所以这根本不会改变它的行为。
然而,如果我再这样做,你就会看到明显的不一样了。因为如果 i 对 2 取余等于 0 ,就会执行 continue,所以从第一个开始,每两个迭代会跳过一个。
我们可以记录实际的 i 变量的值来查看当前的索引值是怎么变化的。
当 i 为 0 时,它不会运行,因为 0模2 的结果是 0,结果是 true,程序会执行 continue。当 i 是1 时,我们会输出记录,当等于 2 时,不会输出,当等于 3 时,我们会输出记录,当等于 4 时,不会输出,程序到不了 5,因为如果等于 5,我们就不会执行 for 循环了,因为这个 for 循环的条件就是 i 小于 5。
break
如果我们把上面代码中的 continue 替换成 break,你可以看到情况是完全不一样的。
#include <iostream>
int main(int argc, const char** argv)
{
for(int i = 0; i <5; i++)
{
if(i%2 == 0)
break;;
std::cout << i<< ":\tHello, World!\n";
}
return 0;
}
程序什么都没有输出
我们做一下修改。
第一次迭代的时候,i 为 0, i+1 模 2 的结果是 1,所以 if 评估表达式的结果为 false,程序不会到达 break 语句。
第二次迭代的时候,i 为1, i+1 模 2 的结果是 0,所以 if 评估表达式的结果为 true,程序执行 break 语句,循环结束了。
这就是 break,它可以让程序完全跳出 for 循环,当然这些控制流语句可以用在所有的循环语句中,所以它们在 for 循环、while 循环、do-while 循环中的运作方式是一样的。
好了,最后一个是 return。
return
当前主函数是一个需要返回 int 的函数(第三·行有关键字 int ),所以我们不能只是写 return,我们需要写 return XXX。
我们编译试一下
程序报错,你可以看到程序申明必须返回一个值。
关于 return 语句,基本上就是这些了,需要注意的是,它不是必须在循环中使用,这点与 continue 和 break 不同。当然,如果你的函数要一个返回值,记得在 return 后面给它一个对应的值来返回。
后话
整体上说,这些控制语句就是控制你的代码如何 流动 的。控制语句结合循环语句和 if 语句一起完成程序运行,这些就是编程的基本逻辑,你可以使用这些控制语句语句决定下一行要执行什么代码,这些是可以改变你的程序行为的工具。
之后的系列中,我们会一直使用所有这些控制语句,并向你们展示它们在哪里使用以及怎么用。还可能向您展示如果不使用它们如何编写代码。