作业帮 > 综合 > 作业

int x=1,a=0,b=0;switch (x){case 0:b++;case 1:a++;case 2:a++;

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/05/15 21:45:35
int x=1,a=0,b=0;switch (x){case 0:b++;case 1:a++;case 2:a++;b++;} printf("%d,%d",a,b);
为啥是2,1 我算的是1,0
int x=1,a=0,b=0;switch (x){case 0:b++;case 1:a++;case 2:a++;
switch 语句中,case只是找到入口点,从该入口点开始所有的case都会执行,通常说它具有穿透性,如果想只执行某个case下面的代码,要在后面加上break,表明中断处理.
#include
int main()
{
int x=1,a=0,b=0;
switch (x)
{
case 0:
b++;
case 1://x=1,所以,从这里入口开始往下执行
a++;//a变成1
case 2:
a++;//a变成2
b++;//b变成1
}
//最后输出为2,1
printf("%d,%d",a,b);
return 0;
}
//加上break语句就会中断处理了,如:
int x=1,a=0,b=0;
switch (x)
{
case 0:
b++;
break;
case 1://x=1,所以,从这里入口开始往下执行
a++;//a变成1
break;//中断
case 2:
a++;
b++;
break;
}
这时候算出来的结果就是1,0了.
再问: 我的意思是a++不是运算完在自增1么 那不就是说再case2的时候虽然是++ 但是 自增的时候不在printf之内?
再答: 到printf的时候,所有的计算都完成了。。。
再问: 意思是不管前面是不是a++ 还是++a 只要打printf了 就算是a++也要也要printf出最后的结果既a自增1后的结果?
再答: 你自己看看代码嘛,你printf a和b的时候,a和b计算早就结束了,跟前增还是后增没有任何关系的。除非是在它正在计算的时候取它的值。比如 int i=0,a=1; i=++a;//前自增,先增加再返回值,所以,i值为2,a为2 i=a++;//后自增,取自增之前的值,再自增,i为1,a为2 后面i的值不同,但a的值是一样的