首页 > 试题广场 >

void main(void) { char ...

[单选题]
void main(void) {
    char *s = "1314520";
    int v1 = 0, v2 = 0, v3 = 0, v4 =0;
    for (int i = 0; s[i]; i++) {
        switch(s[i]) {
            default: v4++;
            case '1': v1++;
            case '2': v2++;
            cas3 '3': v3++;
        }
    }
    printf("%d, %d, %d, %d", v4,v1,v2,v3)
}
上述代码段的输出为()
  • 3,5,6,7
  • 7,7,7,7
  • 7,2,1,1
  • 0,2,1,1
滚出Java工程师题库
发表于 2019-08-12 19:29:22 回复(10)
default顾名思义是缺省情况,只有任何条件都不匹配的情况下才会执行,故会匹配到s[i]为‘4’,‘5’,‘0’ 的情况。于是v4++三次,v4=3.并且这个default后没有使用break语句,于是case‘1’、‘2’、‘3’都会执行三次。注意到所以语句都没有加break,则语句执行过之后会继续下面的case语句,另外由于s[i]中有两个1,故v1,v2,v3此时为5.另外有一个2,v2,v3++后为6,还有一个case3 于是v3++.最终v3为7.
发表于 2019-08-01 17:43:12 回复(10)
char*s = "1314520";
v1 = 0, v2 = 0, v3 = 0, v4 =0;
第一次循环:
    i = 0,s[0]=1,switch(1),进入case'1': v1++,v1=1;因为没有break,所以继续执行,case'2': v2++,v2=1; case'3': v3++,v3=1; 执行i++,i=1;
第二次循环:
    i = 1,s[1]=3,switch(3),进入case'3': v3++,v3=2; 执行i++,i=2;
第三次循环:
    i = 2,s[2]=1, switch(1),进入case'1': v1++,v1=2;因为没有break,所以继续执行,case'2': v2++,v2=2; case'3': v3++,v3=3; 执行i++,i=4;
第四次循环:
    i = 3,s[3]=4, switch(4),进入default: v4++;v4=1;因为没有break,所以继续执行, case'1': v1++,v1=3; case'2': v2++,v2=3;
               case'3': v3++,v3=4;执行i++,i=4;
第五次循环:
    i = 4,s[4]=5, switch(5), 进入default: v4++;v4=2;因为没有break,所以继续执行,case'1': v1++,v1=4;case'2': v2++,v2=4;
               case'3': v3++,v3=5;执行i++,i=5;
第六次循环:
    i = 5,s[5]=2, switch(2), 进入case'2': v2++,v2=5;因为没有break,所以继续执行, case'3': v3++,v3=6; 执行i++,i=6;
第七次循环:
    i = 6,s[6]=0,switch(0),进入default: v4++;v4=3;因为没有break,所以继续执行case'1': v1++,v1=5;case'2': v2++,v2=6;
               case'2': v3++,v3=7; 执行i++,i=7; 跳出循环,打印v4,v1,v2,v3
发表于 2019-08-05 12:18:12 回复(4)
看到这种题我就知道又是捞比顺丰的题了
发表于 2019-08-14 08:04:23 回复(0)
s[6]='0'时因为是字符型,0对应的ASC码值是48为真继续执行,s[7]='\0',对应的ASC码值是0为假,结束循环
发表于 2022-07-20 15:42:31 回复(0)
1.default是所有case条件不符合时才会执行;
2.case语句若不加break,则当一条满足条件的case语句执行后,其下面的case语句都会执行。
利用这两点就可以得出A答案。
发表于 2019-09-18 20:18:16 回复(0)
讲个笑话,我在练习java
发表于 2020-07-08 17:13:30 回复(0)
我还在想是s[6]是0就不执行了
发表于 2020-03-25 10:51:54 回复(0)
cas3 到底是啥?不会报错???
发表于 2021-05-13 17:02:20 回复(1)
主要是程序中,每个分支都没有break结束,所以无论执行哪个,后面的都会继续跟着执行
发表于 2020-09-12 09:17:58 回复(1)
char *s="1314520"   ????????????????? 你想啥呢  知道你想出的啥题  能不能认真点...
发表于 2019-10-26 23:19:36 回复(0)

case后不带break会一直往后执行


发表于 2019-03-16 13:41:46 回复(2)
字符‘0’是true,不会挑出循环。整型0才是“假”
发表于 2024-10-29 17:30:05 回复(0)
指针数组不是指针常量😂,哥们下次注意点。
发表于 2022-10-29 14:53:00 回复(0)
记得之前有道题说default默认最后执行,但是这道题default的位置不一样的话答案也不一样,switch语句原理好像不同编译器实现不一样。最好的方法是加break语句啊,避免二义性,如果有fall-through,要添加注释才行。
发表于 2022-09-27 09:25:36 回复(0)
 cas3 '3': v3++;
发表于 2022-02-23 16:41:43 回复(0)
default顾名思义是缺省情况,只有任何条件都不匹配的情况下才会执行,故会匹配到s[i]为‘4’,‘5’,‘0’ 的情况。于是v4++三次,v4=3.并且这个default后没有使用break语句,于是case‘1’、‘2’、‘3’都会执行三次。注意到所以语句都没有加break,则语句执行过之后会继续下面的case语句,另外由于s[i]中有两个1,故v1,v2,v3此时为5.另外有一个2,v2,v3++后为6,还有一个case3 于是v3++.最终v3为7.
发表于 2021-12-03 08:13:31 回复(0)
在switch中,像这种没有break的代码,如果,符合case的话,就执行,且要按顺序来如果后面是default也要执行,如果是像这种的default在上面依旧按顺序执行。 我个人认为,像default还是case都只是一个接口,之后的执行还是按顺序执行。
发表于 2021-03-31 11:10:30 回复(0)
我想问个问题 s6是0还会执行吗
发表于 2020-08-24 00:02:46 回复(0)
这个题要考察的主要是多个case中没有break时,只要第一个case匹配上,后续case都不会做匹配直接进行操作。一直以为就算没有break,也会做case匹配orz
发表于 2020-05-22 10:01:18 回复(0)