目录
基本格式
switch(表达式)
{
case 常量表达式1:执行代码块1;break;
...
case 常量表达式n:执行代码块n;break;
default:执行代码块n+1;
break;
}
switch是一个多分支选择语句,并且可以支持嵌套。
switch后表达式是判断依据,如果表达式的值等于case后常量表达式的值,则执行后面的代码块直到遇到break或者全部执行。
default的作用就是当表达式的值和常量值全部对比过之后,如果没有匹配的就会输出default后的语句。
switch语句与if语句的区别
(1)switch对后面表达式的值判断更加严格。简单来说,你只能看“被判断的值”是否“==”case后面那些常量,而不能进行大于小于的比较。
(2)switch是连续执行判断为真后面所有内容。例如,在第一个表达式判断为真,则一口气执行后面的所有语句直到碰到break。
(3)switch后面的表达式语句只能是整型或是字符类型。
(4)case后可以是空语句。
switch语句的一些特性
(1)default可以不要,break也可以不要。
(2)case后,可以有多个语句,可以不用{}括起来。
(3)case后常量表达式值不能一样,否则出错。
(4)case后可以是空语句。
(5)case和default子句的先后顺序可以先后变动,并且变与不变没有区别。
switch语句的普通应用
一个用烂的例子。。。
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
int day = 0;
printf("请输入一个数字\n");
scanf("%d", &day);
switch (day)
{
case 1:printf("星期一\n");break;
case 2:printf("星期二\n");break;
case 3:printf("星期三\n");break;
case 4:printf("星期四\n");break;
case 5:printf("星期五\n");break;
case 6:printf("星期六\n");break;
case 7:printf("星期天\n");break;
default:printf("请重新输入\n");break;
}
return 0;
}
switch语句稍微高阶的应用
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
int date = 0, year = 0, month = 0, day = 0;
printf("请依次输入年,月,日;中间用空格隔开");
scanf("%d %d %d", &year, &month, &day);
switch (month)
{
case 12:date += 30;
case 11:date += 31;
case 10:date += 30;
case 9:date += 31;
case 8:date += 31;
case 7:date += 30;
case 6:date += 31;
case 5:date += 30;
case 4:date += 31;
case 3:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
date += 29;
else
date += 28;
case 2:date += 31;
case 1:date += day; break;
default:printf("error");break;
}
printf("%d年%d月%d日是该年的第%d天", year, month, day, date);
return 0;
}
从这个例子看出,当不加break的时候,switch可以做到if无法做到的,即连续执行,并且可以判断开始的位置;如果你想对结束的位置进行判断后跳出,把它反过来就行。