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

开始 x=1 执行 case 1 a就变成1了然后没有break继续执行case2 a就变成2了
然后又没有 break 继续执行case3 所以b为1了
所以就是2,1

case 语句若没有break就会继续往下执行下面的case 语句追问

我的意思是a++不是运算完在自增1么 那不就是说再case2的时候虽然是++ 但是 自增的时候不在printf之内?

追答

是a++这一条语句执行完之后 就+1不是所有执行完才加1

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-25
大哥,每个case后面要加break的啊,没有break的话,程序会一直往下走,你这个例子里面,首先会进case1,case1执行完了就会接着执行它后面的case2,直到结束。追问

我的意思是a++不是运算完在自增1么 那不就是说再case2的时候虽然是++ 但是 自增的时候不在printf之内?

追答

a++这条指令执行完就+1,大括号里的所有语句都执行完就退出switch语句,然后执行printf函数。

来自:求助得到的回答
第1个回答  2013-01-25
因为case 1;后面没有break,程序继续执行a++;b++了
第2个回答  2013-01-24
switch 语句中,case只是找到入口点,从该入口点开始所有的case都会执行,通常说它具有穿透性,如果想只执行某个case下面的代码,要在后面加上break,表明中断处理。
#include <stdio.h>
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的值是一样的

本回答被提问者和网友采纳

main() { int x=1,a=0,b=0; switch(x){
2.添加break后,结果是a=1,b=0 include "stdio.h"main(){ int x=1,a=0,b=0;switch(x){ case 0 : b++ ; break ;case 1 : a++ ; break ; case 2 : a++ ; b++ ; break ;} printf("a=%d,b=%d\\n",a,b);} ...

...0:b++;case 1:a++;case 2:a++;b++;} printf("%d,%d",a,b);_百度...
开始 x=1 执行 case 1 a就变成1了然后没有break继续执行case2 a就变成2了 然后又没有 break 继续执行case3 所以b为1了 所以就是2,1 case 语句若没有break就会继续往下执行下面的case 语句

int x=1,a=0,b=0; switch(x) { case 0: b++; case 1: a++; case 2...
进入时,x=1,即switch(1) ,此时进入到case 1,执行a++后,a=1;由于没有break,所以继续执行下面的语句,case 2: a++; b++; 执行完之后,a=2,b=1。应该解释的比较清楚吧。

...int x=1,a=0,b=0; switch(x){ case 0: b++; case 1: a++ ca_百度...
因为每条case后面没有break,所以从case 1挨个执行,因此答案是A

...{ int x = 1 , a = 0 , b = 0 ; switch( x ) {
因为x=1,所以执行switch语句中case 1:a++;语句a=1 又因为case 1与case 2之间没有break;语句,所以继续执行case 2:a++;b++;语句,则a=2,b=1;然后执行printf( "%d,%d" , a , b ) ;输出2,1

什么是锯齿型书写格式
讲的是程序里面的锯齿型书写格式的话 应该是为了增强程序的可读性,采用缩进的书写形式。如:main(){ int x=1,a=0,b=0;switch(x){ case 0: b++;case 1: a++;case 2: a++;b++;} printf (“a=%d,b=%d\\n”,a,b);} 这个就是用锯齿型书写的,有括号缩进和对齐等。就是为了方便...

...int x=1,a=0,b=0; switch(x){ case 0:b++; case 1:a+
switch(x){ case 0:b++;case 2:a++;b++;} 你要先明白在switch里面如果没有break,是按顺序往下执行的。x=1,所以先从case 1:a++;开始 执行完后,又继续执行case 2,所以最后输出a=2,b=1

...int x=1,a=0,b=0; switch(x){ case 0: b++; case 1: a++; case 2...
a=2,b=1 x=1,进入switch语句,跳入case 1情况,执行a++,a的值变为1,b的值仍然为0。因为case 1没有做break,也就没有跳出,往下跳入case 2,执行a++和b++,a的值变为2,b的值变为1,然后。。。没有了。

帮忙讲一下这几道C语言的题,要过程啊,谢了 算的我都有点蒙了
{int x=1,a=0,b=0; \/\/初始定义 switch(x){ \/\/switch选择 ...SWITCH语句后面是不带{}这个玩意的 case0:b++ ---加个;case1:a++ ---加个;case2:a++;b++;} printf("a=%d,b=%d",a,b)---加个;} 正确的结果是a=2 b=1 先运行了CASE1 由于没BREAK 所以运行CASE...

c语言 改成锯齿形式 求帮忙。
锯齿形式其实就是缩进对其 include <stdio.h> define PRICE 12.5 mian (){ int num = 3;float total;total = num *PRICE ;printf("total = %f\\n",total);} 在比如 main(){ int x=1,a=0,b=0;switch(x){ case 0: b++;case 1: a++;case 2: a++;b++;} printf...

相似回答