1循环和分支语句
a.分支中的多条语句问题
在C语言中,默认在if和else语句中默认都只控制一条语句,若控制多条语句,则需要加上大括号,以保持该语句在if或else的控制范围内。
原本我们是希望成绩大于六十,才能通过考试。但因为if只能控制一条语句的原因,所以不管成绩大不大于60,第二个printf都会执行,所以解决该种问题我们用上大括号就行。
b.悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。比如在下面该图片中,
可能有小伙伴看到else是和第一个if对齐,就觉得和它是一起的,但是我们看看该程序的运行结果,竟然什么都没有输出。那该如何解释呢?如果是和第一个if匹配的话,那么是不是应该输出hehe。如果是和第二个if匹配的话,是不是什么就都不会输出。
c.逻辑运算符的短路问题
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于|| 操作符来说,左操作数的结果不为0时,就⽆需执⾏右操作数。
下面举一例子,相信友友们会更好的理解短路问题
第一个if中的a++结果为0(在执行这个的过程中,也完成了a+1的计算,所以&&右边不执行,所以第一个if不执行。接下来我们看第二个if语句,因为a在前面已经加了1,所以执行第二个if语句中的++a时,++a的结果为2(所以a也为2),再执行b++,所以b为2。接下来我们来看第三个if语句,a++结果为2(a同时加1,变为3),不为0,则右边不需要再执行,所以b仍为2。最后一个仍然像前面这样推理。
d.switch语句中的break和continue
1.case 和后边的数字之间必须有空格
2.每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。不加上break的话,就会把该条case语句执行完后也执行它下面的case或default语句。
3。switch 后的 expression 必须是整型表达式,case 后的值,必须是整形常量表达式。
4.break和continue只在循环和分支语句中出现
在该段截图中,因为a为1,所以执行case1,又因case1后无break语句,所以继续向下执行。case2后有break语句,所以停了下来。
e.do-while的使用
do-while中的循环体至少执行一次,这种的使用场景比较少。