下面列举几个容易出错的if语句实例,如果后续还有新的发现,还会继续更新!
出错一:在括起控制表达式的括号后面加分号
int n = 5; if(n > 0); printf("值为正");
初次运行,感觉一切正常,没有错误,这时我把n的值改为-5重新编译后,------结果还是为正。
这是为什么?
仔细一瞧,我们发现在(n > 0)后面我们多加了个分号!!!
原因:只有一个分号的语句叫做空语句(执行空语句后什么也不会发生),因此可以这样理解:
if(n > 0) ; printf("值为正");
若执行该if语句,无论n是什么值(正、负和0),结果都会显示“值为正”。
出错二:判断相等性时使用 =
不要把判断相等性(是否相等)时使用的 == 运算符和 = 混淆。
错误: if(a = 0)
正确: if(a == 0)
原因:在第一个错误的例子中,变量a会被赋值为0。另外,不管a的值如何,该语句都不会被执行。
出错三:判断三个变量的相等性时使用 ==
下面是判断变量a、b、c的值是否相等的例子。
错误:if(a == b == c)
正确:if(a == b && b == c)
原因:相等运算符 == 是双目运算符,所以 a == b == c 不能实现对三个变量的判断。
出错四:两个条件的判断不使用 && 或 ||
下面是判断变量a是否大于等于3小于等于5的例子。
错误:if(3 <= a <= 5)
正确:if(a >= 3 && a <= 5)
出错五:使用以 bit 为单位的逻辑运算符代替逻辑运算符
下面是判断变量a是否大于等于3小于等于5的例子。
错误:if(a >= 3 & a <= 5)
正确:if(a >= 3 && a <= 5)
原因:逻辑运算符中使用的是 && 或 || 运算符,不要与 & 、| 混淆,它们是不同的。
运算符 |
形式 |
名称 |
综合性 |
& |
X & Y |
按位与运算符 |
左 |
| |
X | Y |
按位或运算符 |
左 |
&& |
X && Y |
逻辑与运算符 |
左 |
|| |
X || Y |
逻辑或运算符 |
左 |