用 break 语句退出循环……
但如果想在循环中的某个地方跳出循环呢?当然,可以重新调整代码的结构,但更简单的方法是,使用
break 语句直接跳出循环:
break 语句可以用 来退出循环语句和 switch 语句。使用 break 时看清你在哪里,并不是所有地方都能够使用 break 。
break 语句可以直接退出当前循环,跳过循环体中 break 之后的所有语句。break 非常有用,因为它有时是结束循环最简单有效的方法,但应该避免滥用 break ,因为它们会降低代码的可读性。
……用 continue 继续循环
如果想跳过循环体的其余部分,然后回到循环的开始,那么 continue 语句就是你的最佳伴侣:
古墓谜案
break 不能从 if 语句中退出。1990 年 1 月 15 日,AT&T 的长途电话系统死机,造成 6 万人无法使用电话服务。起因是一个负责写电路交换部分 C 代码的开发人员企图用 break 从 if 语句中退出,但 break 不能从 if 语句中退出。相反,程序跳过了整段代码,引起了这个 bug,令 7 千万次电话呼叫在 9 个多小时内无法接通……
函数聚焦
在试验新学的循环“咒语”前,我们绕道去看一眼函数。到目前为止,在你写过的每个程序中,都必须创建一个函数——main() 函数:在 C 语言中几乎所有函数都有着相同的格式。例如在下面这个程序中,main() 函数调用了一个自定义函数。larger() 函数与 main() 函数有一点区别,它接收参数(argument 或 parameter)。参数是一个局部变量,函数从调用它的代码那里得到参数的值。larger() 函数要接收两个参数:a 和 b ,它返回两个参数中较大那个的值。
C 标准礼貌指南
main() 这一函数的返回类型是 int ,因此必须在函数结束前包含一条 return 语句。即使不加,代码也能编译通过,但会收到编译器的警告。支持 C99 标准的编译器会在你忘记的时候插入一条 return 语句。如果你想让编译器遵循 C99 标准,可以使用-std=99 选项。
void 函数聚焦
在 C 语言中,大部分函数都有一个返回值。但有时候,想要创建的函数中并没有有用的信息需要返回。它更多只是做了一些事,而不是计算出一个结果。通常情况下,函数都需要包含一条 return 语句,但只要把函数的返回类型声明为 void ,没有 return 语句也无妨。在 C 语言中,关键字 void 意味着无所谓,一旦告诉 C 编译器你不关心函数的返回值,函数就不需要有 return 语句。
这里没有蠢问题问:如果我创建了一个 void 函数,是否就意味它一定不能有 return 语句?答:你还是可以包含 return 语句,但编译器很可能会产生一条警告消息。而且在 void 函数中包含 return 语句没有任何意义。11 在 void 函数中的 return 语句有时可以用来提前退出函数。——译者注问:真的吗?为什么没有意义?答:因为如果你试图读取 void 函数的值,编译器会报错。
链式赋值
在 C 语言中,几乎每样东西都有返回值,不仅仅是函数调用,就连赋值表达式也有返回值。例如下面这条语句:x = 4;
它把数字 4 赋值给变量。有趣的是表达式“x = 4 ”本身也有一个值,这个值是 4,即赋给 x 的值。为什么说这个东西很有用呢?因为你可以用它来做一些很酷的事情,比如把多条赋值语句链在一起写:这行代码同时将 x 和 y 的值设为了 4 。事实上,可以去掉括号,缩短代码的长度:y = x = 4;
你经常会在需要给多个变量赋相同值的代码中看到链式赋值。
弄乱的消息
下面列出了一个 C 语言的小程序。程序少了一块代码,你的任务是将候选代码块(左)和它对应的输出结果进行配对。有的输出结果可能一次都用不到,有的可能用到好几次。用直线把候选代码块和它所对应的命令行输出连接起来。
练习
既然你已经知道了怎么创建 while 循环,请修改程序让它在游戏期间保持计数。每发一张牌就显示一次计数,如果玩家输入 X 就终止程序,如果玩家输入了错误的值(如 11 或 24)就显示错误消息。
弄乱的消息解答
下面列出了一个 C 语言的小程序。程序少了一块代码,你的任务是将候选代码块(左)和它对应的输出结果进行配对。有的输出结果可能一次都用不到,有的可能用到好几次。请用直线把候选代码块和它所对应的命令行输出连接起来。
练习解答
既然你已经知道了怎么创建 while 循环,请修改程序让它在游戏期间保持计数。每发一张牌就显示一次计数,如果玩家输入 X 就终止程序,如果玩家输入了错误的值(如 11 或 24)就显示错误消息。
试驾
既然算牌程序已经完成了,是时候带它出去兜兜风了,您意下如何?觉得它能工作吗?
算牌程序工作了!
你已经完成了第一个 C 程序。借助 C 语言的语句、循环、条件的威力,你已经创造了一个具有完整功能的算牌器。
干得好!
免责声明:用计算机算牌在很多州是犯法的,赌场那群家伙可不是好惹的。所以千万别那么做,好吗?这里没有蠢问题问: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,循环就会永无止尽地运行下去。问:创建一个永无止尽的循环是个好主意吗?答:有时候是,通常在一些诸如网络服务器的程序中会使用无限循环(一个永无止尽的循环),程序会反复地做一件事直到有人停止它。但大部分的程序员使用循环是为了让它们在某个时刻停止。
要点
只要条件为真,
while 循环就会运行代码。
do-while 循环和 while 循环十分类似,不过至少执行一次代码。
某些循环用 for 来写更简洁。
可以用 break 在任意时刻退出循环。
可以用 continue 随时跳到循环条件处。
return 语句会从函数返回一个值。
void 函数不需要 return 语句。
在 C 语言中,所有表达式都有值。
赋值表达式有一个值,因此可以把它们链在一起写(x = y = 0 )。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论