switch语句
switch语句也是一种分支语句。常常用于多分支的情况。
switch语句语法形式:
而语句项是什么呢?
例子:
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1;
printf("星期1\n");
case 2;
printf("星期2\n");
case 3;
printf("星期3\n");
case 4;
printf("星期4\n");
case 5;
printf("星期5\n");
case 6;
printf("星期6\n");
case 7;
printf("星期天\n");
}
return 0:
}
case语句如果不加干预会一直执行下去,所以就会出现如上图所示的结果
而我们如果需要输出指定结果,就需要在每一个小case语句之后加入break(跳出,停止)
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期1\n");
break;//跳出,停止
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
只凭switch语句是无法实现分支的,只有搭配break才能真正分支。
default子句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把他写在任何一个case标签可以出现的位置。
当switch表达式的值并不匹配所有的case标签时,这个default子句后面的语句就会被执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。
练习:
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);
return 0;
}
最后结果:m=5,n=3