关系表达式
关系表达式的结果:要么0 要么1。
警惕陷阱
1
2
3
| int a = 20.1;
bool result= 1<a<10;
//result的值竟然是 true!
|
因为:运算顺序,从左到右,1先和a比较,结果为真,故结果为1;1再和10比较,结果为真。
在c语言中0表示假,非0表示真(通常为1)
分支语句
如果 条件成立 则如何如何 ;否则 则如何如何.
警惕 悬空else
如下代码:
1
2
3
4
5
6
7
8
9
10
| float a = 20.1;
float b = 20.3;
if (a==20.3f)
if (b==20.1f)
printf("Yes\n");
else
printf("No\n");
//什么也不会打印
|
因为当有嵌套的if else时,else会和最近的if匹配。
如何解决:给每个if else后加上大括号。
1
2
3
4
5
6
7
8
9
10
| float a = 20.1;
float b = 20.3;
if (a == 20.3f) {
if (b == 20.1f) {
printf("Yes\n");
}
} else {
printf("No\n");
}
|
一个建议:在写条件语句时,关系表达式中若有常量参与,建议将常量写在左边,好处是:避免笔误。
如:
1
2
3
| float a=20.1;
if (a=5){printf("a equal 5.\n");}
//输出:a equal 5.
|
aha,竟然表达式成立了?为什么?因为表达式结果a是5,非零则为真,所以表达式成立。
如果这样写:
1
2
3
| float a=20.1;
if (5=a){printf("a equal 5.\n");}
//编译器会提示错误,提示我们表达式写的有问题。
|
编译器会提示我们,表达式写的有问题,我们就会发现:原来少写了一个等号。