一、问题
switch 语句由 switch 分⽀点和多个 case 处理⼊⼜构成,每个 case 不具有处理互斥的功能,⼀个 case 执⾏完后,默认继续执⾏下⼀个 case。此时,如果不希望继续执⾏下⼀个 case,可以⽤ break 语句退出 switch 结构。break 不是 switch 中的固有组成部分,那么在switch 中使⽤ break 有哪些需要注意的地⽅呢?
二、解答
(1)最容易出的问题是,忘记了 case 后⾯要写⼀个 break,其结果是多个 case 不能互斥,按顺序执⾏。例如:
scanf("%d", &a);switch (a % 4){case 0:printf("A");case 1:printf("B");case 2:printf("C");case 3:printf("D");}
当程序运⾏时输⼊50,输出的结果是多少?
有些⼈不假思索就得出C,其实应该是 CD。
(2)每个 case 都写 break,其实没有这样的必要。例如,根据考试成绩 0~100 给出 对应等级,评级标准为优秀A:85~100,良好 B:70~84,及格 C:60~69,不及格D:0~59。代码如下。
#include <stdio.h>
int main()
{int a;printf("Input examanition score:\n");scanf("%d", &a);switch (a / 5){case 20:printf("A");break;case 19:printf("A");break;case 18:printf("A");break;case 17:printf("A");break;case 16:printf("B");break;case 15:printf("B");break;case 14:printf("B");break;case 13:printf("C");break;case 12:printf("C");break;default:printf("D");}return 0;
}
每个 case 后都加 break,这也是没必要的,可以把那些相同的结论放在⼀起,写成:
#include <stdio.h>
int main()
{int a;printf("Input examanition score:\n");scanf("%d", &a);switch (a / 5){case 20:case 19:case 18:case 17:printf("A");break;case 16:case 15:case 14:printf("B");break;case 13:case 12:printf("C");break;default:printf("D");}return 0;
}
三、总结
C语⾔中的 switch 语句⽐较特殊,⼀个分⽀的结束是依赖 break 完成的。case 只决定程序到哪⾥执⾏,⽽不决定到哪⾥结束。结束位置由 break 来决定,没有 break 就⼀直执⾏到 switch 完整结构结束。