C语言进阶——分支语句06
if分支语句分析:
if语句用于根据条件选择执行语句
else不能独立存在且总是与在它之前的最近if相匹配
esle语句后可以连接其他if语句
用法如下:
if(condition) { //statement 1 } else { //statement 2 }
if语句中零值比较的注意点:
bool型变量应该直接出现在条件中,不要进行比较,这样做更加规范,当然比较的话也没错。
bool b=TRUE; if(b) { //statement 1 } else { //statement 2 }
变量和0值比较的时候,0值应该出现在比较符号的左边,这样可以有时候我们将==写成了=,这个时候编译器就会给我们报错,好让我们快速找到bug的根源,但是如果你将0值写在右边的话,啥奥谢一个等号,编译器是不会报错的。
int i = 1; if(0 == i) { //statement 1 } else { //statement 2 }
float型变量不能直接和0值进行比较,需要定义精度。
#define EPSINON 0.000000001 float f=0.0; if((-EPSINON<=f)&&(f<=EPSINON)) { //statement 1 } else { //statement 2 }
switch语句分析:
- switch语句对应单个条件多个分支的情形
- case语句必须要有break,否则会导致分支重叠
- default语句必须要加上,以处理特殊情况(这里讲一个小例子,有一个团队,的switch语句没有写default,但是在他们先前的思考中,一定是可以匹配到一种情况的,但是由于机器断电,或者短路路等等原因,导致没有一个case可以匹配上,这个时候就出现bug了,由于是机器问题,所以没有办法将这个bug复现,只能到现场调试)
- case语句中的值只能是整型或者字符型
- case语句的排列顺序,按照字母或者数字顺序排列各条语句,正常情况放在前面,异常情况放在后i面,default可以随便放,用于处理真正的默认情况。
代码程序 1:
#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) { 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; } } int main() { f1(5); f1(9); f1(7); f2('o'); f2('d'); f2('e'); return 0; }
这个示例程序,向我们展示了,switch和if的用法
示例程序2:
#include <stdio.h> 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; } break; } } 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); f1(9); f1(7); f2('o'); f2('d'); f2('e'); return 0; }
这个示例程序改写了上面的示例程序1,将switch用if分支语句改写,将if语句用switch语句改写,这说明这两种分支语句是可以互换的。
小结:
- if语句适用于复杂逻辑进行判断的情形中
- switch语句适用于对离散值进行判断的情形中
- if语句和switch语句在功能上可以相互替换
- if语句对于“按片”分支判断的情形 更加简洁
- switch语句对于多分支判断的情形更加简洁