switch格式:
switch (条件表达式) { case 整数: // case可以有一个或多个 语句; break; case 整数: 语句; break; default: 语句; break; }
执行说明:
1.拿到条件表达式的返回值(注意返回值必须是整型)
2.利用条件表达式的返回值和switch后面大括号中的每一个case进行比较, 判断条件表达式的返回值和case后面的整数是否相等 条件表达式 == 整数
3.如果条件表达式的返回值等于某一个case后面的整数, 那么就会执行该case后面的语句
4.执行完语句之后如果遇到break就会结束整个switch语句, 也就是说后面的所有语句都不会被执行
5.如果前面的case不满足, 也就是前面的case的整数和条件表达式的返回值不相等就会继续判断后面的case
6.如果前面所有的case都不满足, 就会执行default后面的语句
使用举例:
要求用户输入一个分数,根据输入的分数输出对应的等级
A 90~100
B 80~89
C 70~79
D 60~69
E 0~59
// 1.提示用户输入一个分数 printf("请输入一个0~100的分数, 以回车结束 "); // 2.定义变量保持用户输入的分数 int score = -1; // 3.接收用户输入的值 scanf("%i", &score); //可以对用户输入的数据进行刷选 如 分数小于 0 或 大于 100 怎么怎么样 // 4.根据用户输入的值输出对应的结果 switch (score/10) { case 10: printf("A "); break; case 9: printf("A "); break; case 8: printf("B "); break; case 7: printf("C "); break; case 6: printf("D "); default: printf("E "); break; }
注意点:
1.Switch得条件表达式注意点
Switch的条件表达式必须是返回整数的表达式, 也就是说()中只能放整数
或者写能够转换为整数的类型也可以, 例如char, 因为char类型可以转换为int类型, 所以写char也可以
switch ('A') { case 6: printf("6"); break; case 8: printf("8"); break; default: printf("other"); break; }
2.case的取值
Switch中, case后面只能放返回值是整数的表达式或者整数, 或者能够转换为整数的类型
case的取值不能重复
case后面不能放变量, 因为系统在编译的时候会对Switch后面所有的case进行优化, 会根据case后面的常量值, 生成一张取值表
int number = 7; switch (6) { case 3 + 3: printf("6"); break; case 'A': printf("8"); break; case 65: // 异常信息 Duplicate case value '65' printf("65"); break; case number:// 异常信息 Expression is not an integer constant expression printf("8"); break; default: printf("other"); break; }
3.default的位置问题
Switch中的default可以随便放
无聊default写到什么地方, 它都会最后执行(只有前面所有的case都不满足的情况才会执行)
只要某一个case满足, 那么后面所有的case和default都会失效 case语句的穿透问题
同理: 只要default满足, 那么所有的case都会失效
/* 结束switch语句: 1.遇到break 2.执行到switch对应的大括号的结束 } */ switch (20) { default: printf("other "); break; case 6: printf("6"); break; case 8: printf("8"); break; case 20: printf("20"); // 没有写break 如果switch中有一个case满足了条件, 那么其它所有的case和default都会失效 即相当于case default都不存在了 程序一直往下执行 直到遇到break或switch结束大括号}才跳出 case 28: printf("28"); break; }
省略break示例:
// 从键盘输入一个月份,输出对应季节 12~2 冬季 3~5 春季 6~ 8 夏季 9~11 秋季 printf("请输入一个1~12的月份, 以回车结束 "); int number = -1; scanf("%i", &number); switch (number) { case 12: case 1: case 2: printf("冬季"); break; case 3: case 4: case 5: printf("春季"); break; case 6: case 7: case 8: printf("夏季"); break; case 9: case 10: case 11: printf("秋季"); break; default: printf("让我凌乱会儿 "); break; }