鱼C论坛

 找回密码
 立即注册
查看: 1316|回复: 12

[已解决]这段代码的运行结果为什么是D选项

[复制链接]
发表于 2022-3-1 22:27:43 | 显示全部楼层 |阅读模式
10鱼币
屏幕截图 2022-03-01 222606.png
最佳答案
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;
}

最佳答案

查看完整内容

可能是题目印错了,我之前见过差不多一模一样的代码, 只不过他的外层是 switch(x), 才发现你的外层是 switch(y)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-1 22:28:17 | 显示全部楼层
无论我怎么看都是0,0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-1 22:30:38 | 显示全部楼层
因为 case 只匹配一次,匹配成功就不再匹配了,

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

而你的题目那里外层 switch 的 case 1 后面没有break,所以往下执行了 case 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-1 22:38:10 | 显示全部楼层
isdkz 发表于 2022-3-1 22:30
因为 case 只匹配一次,匹配成功就不再匹配了,

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

不对呀,大哥我把代码运行了一遍,结果就是0,0呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-1 22:39:19 | 显示全部楼层
58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀


方便把你的代码粘贴上来让我调试一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-1 22:45:57 | 显示全部楼层
isdkz 发表于 2022-3-1 22:42
可能是题目印错了,我之前见过差不多一模一样的代码,

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

我知道你什么意思,但是书上第一层写的是switch(y)但是答案写的振振有词,我就想着是答案错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-1 22:48:02 | 显示全部楼层
58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀

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

不过你那个没有 0,0 的答案,很可能外层就是 switch(x) 的,可能试卷印错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

没注意到那里是 y
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-1 22:51:19 | 显示全部楼层
总之非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-1 22:53:00 | 显示全部楼层
总之非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 10:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表