i + 1 = 11, 匹配 case 11 ,因为 case 11 后面 没有 break; 那就继续执行 case 12 ,然后break 退出
这个过程中 i = 10, i 自增了 两次,最终 就是 i = 12
例如
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
return 0;
}//当我们输入6的时候,打印了星期六和星期天
这是由于,当我们执行第六条指令之后,没有阻止它停下来的话,它就会一直执行,直到把语句执行完,如果有default表达式,default后面的语句也会被执行
#include <stdio.h>
int main()
{
int day = 0;
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;
}
return 0;
}//当我们加上break之后,输入6之后,打印的结果为星期六,break阻止了程序的继续进行
**注:**case:后面不一定都要加break,按需求加就行
当我们输入的值,case语句总中没有,当我们又想给人们一个反馈的时候
这个时候我们就可以使用default
例如
#define _CRT_SECURE_NO_WARNINGS
#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("输入错误");
break;//当我们打印8,9,10时候,打印出来的结果就是输入错误
}
return 0;
}
**注:每个switch语句中只能出现一条default语句,但是它可以出现在语句列表(switch{}中)**中的任何位置
问题回答:
在switch语句中结果为12而不是13,尽管它执行了第二个case,即case12,并且中断了程序的原因是该case没有加上break语句,导致程序执行完case12后,继续往下执行,执行了下一个case,即default语句,输出了E。
针对这个问题的解决方案是,在case12的末尾加上break语句,即可确保程序执行完case12后就跳出了switch语句,不会继续往下执行其他case。
具体的代码如下所示:
int main()
{
int i = 12;
switch (i) {
case 9:
printf("A");
break;
case 12:
printf("1");
printf("2"); // 这里输出了1和2,但并没有退出switch语句
break;
case 13:
printf("3");
break; // 没有执行到这里
default:
printf("E");
break;
}
return 0;
}
修正后的代码如下所示:
int main()
{
int i = 12;
switch (i) {
case 9:
printf("A");
break;
case 12:
printf("1");
printf("2"); // 这里输出了1和2,但并没有退出switch语句
break;
case 13:
printf("3");
break; // 执行到这里跳出switch语句
default:
printf("E");
break;
}
return 0;
}
在case12的末尾加上了break语句,这样就能确保程序执行完case12后就跳出了switch语句,不会继续往下执行其他case。