int s=0
s+=1
s+=2
s+=3
switch循环后s等于6
为什么?
s=0
s+=1,此时s=0+1=1
s+=2,此时s=1+2=3
s+=3,此时s=3+3=6
题主把全部代码给出啊!你这说谁能看出来问题啊!
switch适用于多分支语句
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("选择错误\n");
break;
}
}
需要强调的是,switch后面的必须是整形表达式,浮点型就会出错。
case 后面只能放常量表达式,必须是整形,也必须是常量。
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1: n++;
case 2:m++;n++; break;
}
case 4:m++;break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
system("pause");
return 0;
}
//结果是m=5,n=3;
在上述参考资料中给出的代码中,switch语句是根据输入的整数i的值,决定执行哪一个case里面的代码块。每一个case后面的整形常量表达式与i的值相等时,就会执行对应的代码块。如果没有一个case的表达式与i的值相等,则默认执行最后的default代码块。而每一个case代码块的最后是没有break语句的,这意味着不管case语句块执行完毕与否,都会继续执行下一个case块的代码。因此,当i的值为3时,会执行case 3、case 4、case 5、case 6和case 7中的全部代码块,最终将s的值增加到6。要解决这个问题,只需要给每一个case语句块加上break语句,表示执行完case语句块后跳出switch循环。修改后的代码如下:
#include <stdio.h>
int main() {
int i = 0;
scanf("%d", &i);
int s = 0;
switch (i) {
case 1:
s++;
break;
case 2:
s++;
break;
case 3:
s++;
break;
case 4:
s++;
break;
case 5:
s++;
break;
case 6:
s++;
break;
case 7:
s++;
break;
default:
break;
}
printf("s = %d\n", s);
return 0;
}