58869333 发表于 2022-3-1 22:27:43

这段代码的运行结果为什么是D选项

isdkz 发表于 2022-3-1 22:27:44

本帖最后由 isdkz 于 2022-3-1 22:45 编辑

58869333 发表于 2022-3-1 22:40
#include
int main(int argc, char *argv[])
{


可能是题目印错了,我之前见过差不多一模一样的代码,

只不过他的外层是 switch(x),

才发现你的外层是 switch(y)。

#include <stdio.h>
int main(int argc, char *argv[])
{
      int x =1,y = 0,a =0 ,b=0;
      switch(x)   // 这里是 x
                {
                case 1:
                        switch (y){
                              case 0 :a++;break;
                              case 1: b++;break;
                        }
                case 2:a++;b++;break;
                case 3:a++;b++;
      
      }
      printf("%d,%d",a,b);
      return 0;
}

58869333 发表于 2022-3-1 22:28:17

无论我怎么看都是0,0

isdkz 发表于 2022-3-1 22:30:38

因为 case 只匹配一次,匹配成功就不再匹配了,

所以一旦匹配成功就还会往下执行,所以需要加 break;

而你的题目那里外层 switch 的 case 1 后面没有break,所以往下执行了 case 2

isdkz 发表于 2022-3-1 22:33:33

58869333 发表于 2022-3-1 22:28
无论我怎么看都是0,0

x 为 1,y 为 0,匹配上外层 switch 的 case 1,里层 switch 的 case 0,a 自增后 a 的值为 1,

然后里层 switch 后面没有 break; 所以外层 switch 往下执行了 case 2,

然后 a 和 b 都自增了,这时候 a 的值为 2,b 的值为 1。

58869333 发表于 2022-3-1 22:38:10

isdkz 发表于 2022-3-1 22:30
因为 case 只匹配一次,匹配成功就不再匹配了,

所以一旦匹配成功就还会往下执行,所以需要加 break;


不对呀,大哥我把代码运行了一遍,结果就是0,0呀

isdkz 发表于 2022-3-1 22:39:19

58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀

方便把你的代码粘贴上来让我调试一下吗?

58869333 发表于 2022-3-1 22:40:04

#include <stdio.h>
int main(int argc, char *argv[])
{
        int x =1,y = 0,a =0 ,b=0;
        switch(y)
                {
                case 1:
                        switch (y){
                                case 0 :a++;break;
                                case 1: b++;break;
                        }
                case 2:a++;b++;break;
                case 3:a++;b++;
       
        }
        printf("%d,%d",a,b);
        return 0;
}

58869333 发表于 2022-3-1 22:45:57

isdkz 发表于 2022-3-1 22:42
可能是题目印错了,我之前见过差不多一模一样的代码,

才发现你的外层也是 switch(y)

我知道你什么意思,但是书上第一层写的是switch(y)但是答案写的振振有词,我就想着是答案错了

isdkz 发表于 2022-3-1 22:48:02

58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀

不好意思,是我看错了,我之前见过差不多一模一样的代码就想当然了,

不过你那个没有 0,0 的答案,很可能外层就是 switch(x) 的,可能试卷印错了

isdkz 发表于 2022-3-1 22:50:25

58869333 发表于 2022-3-1 22:45
我知道你什么意思,但是书上第一层写的是switch(y)但是答案写的振振有词,我就想着是答案错了

哦哦,不好意思,我看错了,我之前看了差不多一模一样的代码就想当然了,

没注意到那里是 y {:5_96:}

58869333 发表于 2022-3-1 22:51:19

总之非常感谢{:5_109:}

58869333 发表于 2022-3-1 22:53:00

总之非常感谢{:5_109:}
页: [1]
查看完整版本: 这段代码的运行结果为什么是D选项