我们在日常生活中难免会遇到要做选择的情况,那么在 C 语言中也有做选择的情况。在这种情况下,我们的代码又该怎样写呢?这时就可以用到我们的分支语句了。 总体来说,我们在 C 语言中可以经常看到两种分支语句:第一种 if 分支语句,第二章就是 switch 分支语句了。我们先来介绍第一种分支语句,if 分支语句。
if 语句用于根据条件选择执行的语句,那么这时对应的 else 不能独立存在且总是与它最近的 if 相匹配,else 语句后可以接连其他 if 语句,用法如下:
那么在 if 语句中做零值比较的话,我们得注意几点问题:1、bool 型变量应该直接出现于条件中,不要进行比较;2、变量和 0 值进行比较时,0 值应该出现在比较符号左边;3、float 型变量不能直接进行 0 值比较,需要定义精度。因为我们知道 float 型变量是不精确的,所以不能直接进行比较。为了更加形象的说明,我们总结如下:
下来我们做个示例对 if 语句进行说明,代码如下:
#include <stdio.h> void f1(int i) { if( i < 6 ) { printf("Failed!\n"); } else if( (6 <= i) && (i <= 8) ) { printf("Good!\n"); } else { printf("Perfect!\n"); } } void f2(char i) { if( 'c' == i ) { printf("Compile\n"); } else if( 'd' == i ) { printf("Debug\n"); } else if( 'o' == i ) { printf("Object\n"); } else if( 'r' == i ) { printf("Run\n"); } else { printf("Unknown\n"); } } int main() { f1(5); // Failed! f1(7); // Good! f1(9); // Perfect! f2('o'); // Object f2('d'); // Debug f2('e'); // Unknown return 0; }
根绝我们之前的分析,打印出来的结果应该和我们分析的一样,我们编译运行下,得到结果如下:
那么我们看到打印的结果和我们分析的是一致的,那么大家可能对 f2(char i) 函数有疑问,里面为什么要写成 'c' == i 呢?在这块我们要写成 i == 'c' 的话也没有错,我们编译运行下结果也是对的。那么为什么要那样写呢?根据我们的工程经验来说,一般新手在写 == 时有时会写成 =。如果我们是这样写 'c' = i 的话,编译的时候就直接报错,那么我们在这时便会很快定位出问题。但是我们要写成 i = 'c',编译照样还是通过的,但结果就不对了。对于新手来说,错误很难排查。我们分别编译下两种情况,看看输出的是什么?图一是 'c' = i 这种情况,图二是 i = 'c' 这种情况。
图一
图二
那么我们可以看到第二种情况下,编译可以通过,但结果是错的,为什么会输出那样的结果呢?我们再来分析下源代码,无论你输进去的是什么字母,if( i = 'c' ) 这句代码一直为真,因为它是赋值。所以就一直会打印出 Compile,这样的错误对于我们新手来说是不容易排查的。所以建议大家以后写 这种代码时还是遵照规范的格式来写,以最大程度避免错误。
接下来我们再来讲讲 switch 分支语句。switch 语句对应单个条件分值的情形;case 语句分支必须要有 break,否则会导致分支重叠;default 语句有必要加上,用以处理特殊情况。我们用如下图来表示关系:
那么在 case 语句中的值只能是×××或字符型;case 语句的排列是由顺序的:1、按字母或数字顺序排列各条语句;2、正常情况放在前面,异常情况放在后面;3、default 语句只用于处理真正的默认情况。
那么我们在学习了两种选择语句之后,我们可以用 switch 语句对前面我们写的 if 语句进行改写,f1(int i) 和 f2(char i)代码如下:
void f1(int i) { switch( i < 6 ) { case 1: printf("Failed!\n"); break; default: switch( (6 <= i) && (i <= 8) ) { case 1: printf("Good!\n"); break; default: printf("Perfect!\n"); break; } } } void f2(char i) { switch( i ) { case 'c': printf("Compile\n"); break; case 'd': printf("Debug\n"); break; case 'o': printf("Object\n"); break; case 'r': printf("Run\n"); break; default: printf("Unknown\n"); break; } }
我们再次进行编译,得到结果如下:
我们自己对比前后两次代码,那种写法更加合适,就需要我们自己来选择了。C 语言之所以有提供两种选择语句,就是为了我们用户的自主选择性,在合适的地方用合适的代码。我们可以看到,两种代码都是可以互换的。也就是说同样的功能用 if 语句和 switch 语句都可以实现,这就需要我们自己来选择用哪种方法了。
我们今天学习了 if 语句和 switch 语句,总结如下:1、if 语句适用于复杂逻辑进行判断的情形中;2、switch 语句适用于对离散值进行判断的情形中;3、if 语句和 switch 语句在功能上可以互换;4、if 语句对于“按片”分支判断的情形更加简洁;5、switch 语句对于多分支判断的情形更加简洁。后面我们会继续对 C 语言的学习。
欢迎大家一起来学习 C 语言,可以加我QQ:243343083。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。