1、if 语句分析
- if 语句根据条件选择执行语句
- else 语句不能独立存在且总是与它最近的 if 相匹配(else 前面最近的 if)
- else 语句后面可以连接其他 if 语句
if 语句中零值比较的注意点
- bool 型变量应该直接出现在条件中,不要进行比较
- 变量和 0 值比较时,0 值应该出现在比较符号左边
- float 型变量不能直接进行 0 值比较,需要定义精度
说明:
- bool 变量的零值比较也可以写成 0 == b,这样增加了步骤
- 为什么变量和 0 值比较,0 应该写在左边,因为写 0 == i 时,两个等于号可能忘记一个,写成 0 = i,这样编译器就会报错,如果 0 写在右边,编译器不会报错,这样的 bug 很难调试
- 由于 float 类型是不精确的类型,如果直接让 f == 0,该条件可能永远为 false
2、switch 语句分析
- switch 语句对应单个条件多个分值的情况
- case 语句分支必须要有 break,否则会导致分支重叠
- default 语句有必要加上,以处理特殊情况
说明:可以预测到的情况都应该写在 case 中,default 用于处理不可预料的情况。default 必须要加,因为在实际使用场景中的有些情况是模拟不出来,根本无法预测到的,为了避免这种错误,加上 default 语句。
- case 语句中的值只能是整形或字符型(写 case : 1.1 是不合法的)
- case 语句中的排列顺序:(1)按照字母或者数字的顺序排列,(2)正常情况放在前面,异常放在后面,(3)dafault 只用来处理默认情况
3、实验
1、if 和 switch 使用示例
//6-1.c
#include<stdio.h>
void f1(int i){
if (i < 6){
printf("failed!\n");
}
else if (i >= 6 && i <= 8){
printf("good!\n");
}
else{
printf("perfect!\n");
}
}
void f2(char c){
switch(c){
case 'c':
printf("COmpile\n");
break;
case 'd':
printf("Debug\n");
break;
case '0':
printf("Object\n");
break;
case 'r':
printf("Run\n");
break;
default:
printf("Unknown\n");
break;
}
}
int main(){
f1(5);
f1(9);
f1(7);
f2('0');
f2('d');
f2('e');
return 0;
}
2、if 和 switch 互换使用
//6-1.c
#include<stdio.h>
void f1(int i){
switch(i < 6){
case 1:
printf("failed!\n");
break;
default:{
switch(i >= 6 && i <= 8){
case 1:
printf("good!\n");
break;
default:
printf("perfect!\n");
break;
}
break;
}
}
}
void f2(char c){
if ('c' == c){
printf("COmpile\n");
}
else if ('d' == c){
printf("Debug\n");
}
else if ('0' == c){
printf("Object\n");
}
else if ('r' == c){
printf("Run\n");
}
else {
printf("Unknown\n");
}
}
int main(){
f1(5);
f1(9);
f1(7);
f2('0');
f2('d');
f2('e');
return 0;
}
运行结果和上面的一样。
4、小结
1、if 语句适用于复杂的逻辑判断
2、switch 适用于对离散值进行判断的情况
3、if 语句和 switch 语句在功能上可以相互替换
4、if 语句对于“按片”分支判断的情况更加简洁
5、switch 语句对于多分支判断的情况更加简洁