首页 理论教育 break和continue的运用

break和continue的运用

时间:2023-10-23 理论教育 版权反馈
【摘要】:break和continue语句通常在循环结构中使用。简单地说,break语句将程序流程发送到紧跟循环右括号后面的语句。continue语句立即将程序控制发送到此循环的测试条件。还应该指出,break语句只从包含break语句的循环中中断。如果使用嵌套循环,则可能需要多个break语句才能完全退出所有循环。如果vatTemperature不等于目标温度,则执行continue语句,它将控制发送到while语句的expression2,从而忽略continue语句后面的所有语句。

break和continue的运用

break和continue语句通常在循环结构中使用。简单地说,break语句将程序流程发送到紧跟循环右括号后面的语句(在do while中,流程被发送到while语句后的第一个语句)。continue语句立即将程序控制发送到此循环的测试条件(即表达式2)。也就是说,continue语句后面的循环中包含的任何语句在执行continue语句时都被忽略。

举个例子可以帮助你了解break语句是如何工作的。假设你有一个检测200个装满化学品的大桶的温度的系统。当系统检测到某个大桶的温度已经达到指定值时,系统将退出循环并调用一种方法将这个大桶的化学品和另一种配料进行混合。你如何编写这样的算法?考虑下面的代码片段:

现在浏览代码,重点关注while循环。因为计数器初始化为0,所以当测试条件为true(计数器小于或等于200)时,代码调用ReadVatTermp(计数器),这读取vat编号0的温度。然后,该温度被指定为当前温度。让我们假设目标温度是160℃。如果条件测试失败,导致计数器增加1(计数器现在等于1)。然后,程序使用if语句测试计数器是否小于MAXVATCOUNT。因为if测试的结果为假(即计数器不大于MAXVATCOUNT),控制传递回while循环测试表达式(即计数器<=MAXVATCOUNT)。因为变量值仍然小于MAXVATCOUNT,该过程将重复。

假设前50个大桶没有所需的温度。但是,增值到编号51返回等于目标温度的温度。因为两个温度相等,所以break语句被执行。因为break语句导致程序控制转移到第一个语句,在循环结构的右括号后面调用AddChemicals(counter),并添加化学品到编号51(大桶)。然后,代码递增计数器(否则我们可能会在同一个大桶中“双重添加”化学品)。因为这些语句包含在Arduino C loop()函数中,所以程序控制权会传回循环体的顶部,使用计数器的新值再次测试while语句。

应该清楚的是,break语句用于在expression2中的测试终止循环之前退出循环。还应该指出,break语句只从包含break语句的循环中中断。如果使用嵌套循环,则可能需要多个break语句才能完全退出所有循环。

你能否重写上面的中断代码示例以使用continue语句?考虑:

如果你仔细阅读了代码,那么你应该能够意识到,程序能够正常运行,和以前的方式大致相同。但使用continue语句而不是break。注意程序控制现在略有不同。如果vatTemperature不等于目标温度,则执行continue语句,它将控制发送到while语句的expression2,从而忽略continue语句后面的所有语句。同样的警告也适用于continue语句在嵌套循环中,continue语句将控制发送到包含continue语句的循环中。虽然你不会经常使用continue语句,但有时它提供了一个干净的循环编码的替代方案。

让我们重新使用第4章中用于正面或反面程序的电路(见图4-4)。相同的电路如图5-2所示。然而,这一次让我们使用随机数生成器并查找要产生的具体数值。当找到所需值时,代码应点亮“Find it”(找到它),LED持续1秒,并向PC监视器发送消息,同时报告循环计数器的值。然而,每次我们通过控制循环的int变量的正值时,我们应该点亮另一个LED灯1秒,然后向电脑发回一条信息,显示我们有多少次回收整数(回收整数如下所述)。

回想一下,随机数生成器返回一个长整型数据类型,这意味着随机数生成器可能返回数十亿个值。这可能意味着LED闪烁之间的间隔时间较长。让我们将随机数生成器的值限制在0到5000之间。

图5-2 2路闪烁LED示例

鉴于上述信息,你应该如何开始编写解决方案?从五个程序步骤开始。

(1)初始化。

我们需要设置I/O引脚,和计算机串行通信波特率,建立目标数值,定义工作变量,并为随机数生成器设定种子。(www.xing528.com)

(2)输入。

输入过程相当简单:它是调用随机数生成器返回的值。

(3)处理。

在这种情况下,我们需要做的只是检查以确定来自随机数生成器的数据是否等于我们的目标值。如果该值等于我们的目标值,则我们需要准备打开“找到它”指示灯。我们还需要增加pass计数器变量,并确定它是否仍然为正。如果没有,那么我们需要准备好闪烁回收LED。

(4)输出。

如果找到匹配项,则我们需要打开“查找”指示灯1秒。我们还需要用计数器变量的当前值向PC输出一条消息。如果计数器变量为负数,则我们需要打开回收指示灯1秒,并向主机发送消息。

(5)终止。

让我们设定一个终止条件。如果回收LED灯“翻转”了五次,那么让我们关闭程序。串行监视器将告诉我们程序何时结束。

此时,你应该尝试自己编写代码。你有足够的知识来完成这项工作。如果只是阅读清单5-1中的代码并模拟前进,那将是一种逃避。如果你尝试先编写代码,你将学到更多。

代码清单5-1.Random Number Match

在阅读本代码时,你应该感到相当舒服。函数的作用是初始化波特率与PC主机通信的速率。设置I/O引脚,并启动随机数种子生成器。在loop()函数中,while循环测试以确定计数器是否为负;柜台是一个int,因此如果当前值为32767,并且它是递增的,那么值“滚动”,因为位(或符号位)变为1,表示负数。这就是所谓的“回收整数”。

因为程序启动时计数器初始化为0,所以第一个while测试逻辑为true,我们输入循环语句体。然后,代码调用随机数生成器并检查值相对于目标值。如果它们匹配,则会通过串行链路向PC发送相应的消息“找到它”指示灯点亮一秒钟。若未找到匹配项,则计数器将递增。如果测试然后检查以确定计数器是否“翻转”为负值。若有,则计数器复位为0时,循环计数器递增,向电脑发送一条消息,循环指示灯点亮一秒钟。

最后,代码检查以确定recycleCounter是否等于最大值,我们希望运行的回收次数(即等于MAXRECYCLES)。如果是这样,那么调用exit()函数终止程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈