1.前言
C语⾔是结构化的程序设计语⾔,这里的结构是指,顺序,分支,循环结构。实现这些结构的语句我们称之为控制语句,如:实现分支结构的 if , switch 语句,实现循环结构的 for , while ,do while语句,今天,我们就来聊一聊让新手程序员屡试不爽的 if 和swicth语句
2.if语句
2.1 if语句的语法形式
单分支if语句
if(表达式)
{
语句
}
小括号内表达式为真,则执行大括号内的语句 。在C语言中,0表示假,非0表示真。也就是说,如果表达式结果为0,则执行;结果非0,则不执行。
双分支if语句
if(表达式)
{
语句1
}
else
{
语句2
}
所有不满足小括号中表达式的情况,会进入else分支内。在不加大括号的情况下,if 和 else 均默认仅控制一条语句,所以若仅有一条语句需要执行可以不加大括号(但避免出现bug,建议初学者还是加上)
嵌套if语句
if(表达式1)
{
语句1
}
else if(表达式2) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
{
语句2
}
else
{
语句3
}
2.2悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则: else 总是跟最接近的 if 匹配。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
例如,上面的代码不满足第一个if的表达式,而唯一的else是与第二个if相匹配,同时第一个if又控制第二个if语句。所以程序运行的结果就是什么都不打印。
不知道大家在初次看见上述代码时,会不会跟我一样一脸懵!倒不如把上面的代码换一种规范的写法。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
只要 带上适当的⼤括号 ,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使用,让代码的可读性更⾼。
3.swicth语句
3.1switch语句的语法形式
switch (表达式)
{
case value1:
语句1
case value2:
语句2
}
3.2switch语句中的break和default
C语言中规定关键字break只能出现在循环语句和开关中。无疑,这里的break属于后者。如果说case是开始执行该分支的入口,那么break就是执行完该分支后的出口。所以除非多个case共用一条语句,尽量在语句后面加上break。例如
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
总结
switch语句相较于if 语句更加易用,可读性更好,但同时使用条件也更加苛刻。在我们熟练掌握两种语句后灵活使用,总能收到意想不到的效果