用break语句退出循环……

但如果想在循环中的某个地方跳出循环呢?当然,可以重新调整代码的结构,但更简单的方法是,使用break语句直接跳出循环:

用break语句退出循环…… - 图1

用break语句退出循环…… - 图2

break语句可以用 来退出循环语句和switch语句。

使用break时看清你在哪里,并不是所有地方都能够使用break

break语句可以直接退出当前循环,跳过循环体中break之后的所有语句。break非常有用,因为它有时是结束循环最简单有效的方法,但应该避免滥用break,因为它们会降低代码的可读性。

……用continue继续循环

如果想跳过循环体的其余部分,然后回到循环的开始,那么continue语句就是你的最佳伴侣:

用break语句退出循环…… - 图3

用break语句退出循环…… - 图4古墓谜案

break不能从if语句中退出。

1990年1月15日,AT&T的长途电话系统死机,造成6万人无法使用电话服务。起因是一个负责写电路交换部分C代码的开发人员企图用breakif语句中退出,但break不能从if语句中退出。相反,程序跳过了整段代码,引起了这个bug,令7千万次电话呼叫在9个多小时内无法接通……

 

用break语句退出循环…… - 图5函数聚焦

在试验新学的循环“咒语”前,我们绕道去看一眼函数。

到目前为止,在你写过的每个程序中,都必须创建一个函数——main()函数:

用break语句退出循环…… - 图6

在C语言中几乎所有函数都有着相同的格式。例如在下面这个程序中,main()函数调用了一个自定义函数。

用break语句退出循环…… - 图7

larger()函数与main()函数有一点区别,它接收参数(argument或parameter)。参数是一个局部变量,函数从调用它的代码那里得到参数的值。larger()函数要接收两个参数:ab,它返回两个参数中较大那个的值。

 

用break语句退出循环…… - 图8C标准礼貌指南

main()这一函数的返回类型是int,因此必须在函数结束前包含一条return语句。即使不加,代码也能编译通过,但会收到编译器的警告。支持C99标准的编译器会在你忘记的时候插入一条return语句。如果你想让编译器遵循C99标准,可以使用-std=99选项。

 

用break语句退出循环…… - 图9void函数聚焦

在C语言中,大部分函数都有一个返回值。但有时候,想要创建的函数中并没有有用的信息需要返回。它更多只是做了一些事,而不是计算出一个结果。通常情况下,函数都需要包含一条return语句,但只要把函数的返回类型声明为void,没有return语句也无妨。

用break语句退出循环…… - 图10

在C语言中,关键字void意味着无所谓,一旦告诉C编译器你不关心函数的返回值,函数就不需要有return语句。

 

这里没有蠢问题

问:如果我创建了一个void函数,是否就意味它一定不能有return语句?

:你还是可以包含return语句,但编译器很可能会产生一条警告消息。而且在void函数中包含return语句没有任何意义。1

1 在void函数中的return语句有时可以用来提前退出函数。——译者注

问:真的吗?为什么没有意义?

:因为如果你试图读取void函数的值,编译器会报错。

 

用break语句退出循环…… - 图11链式赋值

在 C 语言中,几乎每样东西都有返回值,不仅仅是函数调用,就连赋值表达式也有返回值。例如下面这条语句:

  1. x = 4;

它把数字 4 赋值给变量。有趣的是表达式“x = 4”本身也有一个值,这个值是4,即赋给 x 的值。为什么说这个东西很有用呢?因为你可以用它来做一些很酷的事情,比如把多条赋值语句链在一起写:

用break语句退出循环…… - 图12

这行代码同时将 xy 的值设为了 4 。事实上,可以去掉括号,缩短代码的长度:

  1. y = x = 4;

你经常会在需要给多个变量赋相同值的代码中看到链式赋值。

用break语句退出循环…… - 图13弄乱的消息

下面列出了一个C语言的小程序。程序少了一块代码,你的任务是将候选代码块(左)和它对应的输出结果进行配对。有的输出结果可能一次都用不到,有的可能用到好几次。用直线把候选代码块和它所对应的命令行输出连接起来。

用break语句退出循环…… - 图14

用break语句退出循环…… - 图15练习

既然你已经知道了怎么创建while循环,请修改程序让它在游戏期间保持计数。每发一张牌就显示一次计数,如果玩家输入X就终止程序,如果玩家输入了错误的值(如11或24)就显示错误消息。

用break语句退出循环…… - 图16

用break语句退出循环…… - 图17弄乱的消息解答

下面列出了一个C语言的小程序。程序少了一块代码,你的任务是将候选代码块(左)和它对应的输出结果进行配对。有的输出结果可能一次都用不到,有的可能用到好几次。请用直线把候选代码块和它所对应的命令行输出连接起来。

用break语句退出循环…… - 图18

用break语句退出循环…… - 图19练习解答

既然你已经知道了怎么创建while循环,请修改程序让它在游戏期间保持计数。每发一张牌就显示一次计数,如果玩家输入X就终止程序,如果玩家输入了错误的值(如11或24)就显示错误消息。

用break语句退出循环…… - 图20

用break语句退出循环…… - 图21试驾

既然算牌程序已经完成了,是时候带它出去兜兜风了,您意下如何?觉得它能工作吗?

用break语句退出循环…… - 图22

算牌程序工作了!

你已经完成了第一个C程序。借助C语言的语句、循环、条件的威力,你已经创造了一个具有完整功能的算牌器。

干得好!

用break语句退出循环…… - 图23

免责声明:用计算机算牌在很多州是犯法的,赌场那群家伙可不是好惹的。所以千万别那么做,好吗?

这里没有蠢问题

:C语言为什么需要编译?其他一些语言就不需要编译,比如JavaScript,是吗?

:为了让代码执行起来更快,C语言需要编译。尽管有些语言不是编译型语言,但它们中的一些,像JavaScript和Python,为了提高速度通常会在幕后使用一些编译技术。

:C++是另一个版本的C语言吗?

:不是,虽然C++的设计初衷是为了扩展C,但现在看来远不止如此,人们最初创造C++和Objective-C都是为了用C语言写面向对象的程序。

:什么是面向对象?我们在本书中会学吗?

:面向对象是一种对抗软件复杂性的技术,我们在本书中不会做专门研究。

:C语言为什么看起来很像JavaScript、Java和C#等语言?

:C语言的语法非常简洁,因此影响了很多其他语言。

:gcc这三个字母分别代表什么含义?

:GNU编译器套装(GNU Compiler Collection)。

:为什么是“套装”?难道不止C语言一种吗?

:GNU编译器套装可以用来编译很多语言,而C语言可能是人们在应用gcc时使用最多的语言。

:我能创建一个永无止尽的循环吗?

:可以,如果循环条件的值是1,循环就会永无止尽地运行下去。

:创建一个永无止尽的循环是个好主意吗?

:有时候是,通常在一些诸如网络服务器的程序中会使用无限循环(一个永无止尽的循环),程序会反复地做一件事直到有人停止它。但大部分的程序员使用循环是为了让它们在某个时刻停止。

 

用break语句退出循环…… - 图24要点

  • 只要条件为真,while循环就会运行代码。

  • do-while循环和while循环十分类似,不过至少执行一次代码。

  • 某些循环用for来写更简洁。

  • 可以用break在任意时刻退出循环。

  • 可以用continue随时跳到循环条件处。

  • return语句会从函数返回一个值。

  • void函数不需要return语句。

  • 在C语言中,所有表达式都有值。

  • 赋值表达式有一个值,因此可以把它们链在一起写(x = y = 0)。