C程序经常需要多次检查同一个值,并且在每一种情况中执行非常类似的代码片段。
可以使用一连串的if语句,这没有错,但对于这种逻辑,C语言提供了替代的写法。
C语言可以用switch语句进行逻辑测试。
switch语句
为了避免写许许多多的if语句,C语言提供了另一种选择: switch语句。
switch语句和if语句有些像,但switch可以测试一个变量的多种取值
当计算机遇到switch语句,它会检查给出的值,然后寻找匹配的case.找到后,它会运行case之后的所有代码直到遇到break语句。计算机会一直运行下去直到有人吩咐它退出switch语句。
漏掉break会让代码出错。
大部分C程序在每个case段的末尾都有一条break语句,这样做虽然会有失效率,但可以提高代码的可读性。
switch语句可以取代一连串的if语句。
switch语句检查一个单独的值。
计算机会在第一个匹配的case语句处开始执行代码。
在遇到break或到达swi tch语句的末尾前,代码会一直运行。
核对是否把break放对了地方,否则switch语句就会出错。
为什么要用switch语句取代if当需要多次检查同一变量时,使用switch语句会更方便。
使用switch语句让代码更清晰,一段代码处理一个变量的结构,结构一目了然,相反,一连串的if语句就没那么清晰了,可以用下落逻辑在不同的分支之间复用代码。
switch语句不但可以检查变量switch语句还可以检查两个值是否相等。
switch语句不能检查字符串或任何形式的数组,switch语句只能检查值。
在C语言中使用while循环
C语言中最基本的循环结构是while循环,只要循环条件一直为真,while循环就会一次又一次、周而复始地运行代码。
while (<某个条件>) 【在运行循环体前检查条件。】
{
【循环体在花括号里。】
.../*在这里做-些事情*/
【如果循环体中只有一行代码,你可以不加花括号。】
}当程序执行到循环体的末尾,计算机就会检查
循环条件是否仍为真。如果是,就会再次执行
循环体中的代码。
while循环还有一种形式,它总是在循环体运行后才检查循环的条件,也就是说循环体至少会被执行一次,我们叫它do...while循环:
do {
/*买彩票 */
} while (have_not_won) ;
这个例子是一个从1数到10的while循环:
int counter = 1;【这是循环启动代码】
while(counter < 11) 【这是循环条件】
{
printf ("%i个枣\n", counter);
【这是循环更新代码,它用来在循环体的末尾更新计数器。】counter++;【别忘了,counter++表示“counter变量的值加1”】
所有循环都是这样的三部曲:首先为循环准备变量,其次在每一轮的循环前检查条件,最后在循环末尾更新计数器或实现类似功能。
因为这个模式是通用的,C语言有for循环,
for循环可以让代码看起来更简洁。同样的代码如果用for循环来写:
int counter ;
for (counter = 1; counter < 11;【这是每次循环执行前对条件进行检查的代码】 counter++)【这是每次循环后运行的代码】
{
printf ("%i个枣\n", counter) ;
}【因为循环体中只有一行代码,可以去掉花括号。】
C语言大量使用for循环,至少要和while循环用得一样多。for循环不但可以减少代码的行数,而且便于其他C程序员阅读,因为所有用来控制循环的代码—控制counter变量值的代码—现在都放到了for语句中,井从循环体中分离了出来。
但如果想在循环中的某个地方跳出循环可以使用break语句直接跳出循环:
while (feeling_hungry)
{
eat_cake () ;
if (feeling_queasy)
/*从while循环中跳出*/
break;【"break"直接跳出循环】
}
drink_coffee () ;
}
break语句可以直接退出当前循环,跳过循环体中break之后的所有语句。break非常有用,因为它有时是结束循环最简单有效的方法,但应该避免滥用break,因为会降低代码的可读性。
用comtinue继续循环
如果想跳过循环体的其余部分,然后回到循环的开始,那么可以使用continue语句
while(feeling_hungry)
{
if(not_lunch_yet)
{
/*回到循环条件*/
continue ;【continue”带你回到循环的开始】
}
eat_cake () ;
}
break不能从if语句中退出