这段代码的运行结果为什么是D选项
本帖最后由 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;
} 无论我怎么看都是0,0
因为 case 只匹配一次,匹配成功就不再匹配了,
所以一旦匹配成功就还会往下执行,所以需要加 break;
而你的题目那里外层 switch 的 case 1 后面没有break,所以往下执行了 case 2 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。 isdkz 发表于 2022-3-1 22:30
因为 case 只匹配一次,匹配成功就不再匹配了,
所以一旦匹配成功就还会往下执行,所以需要加 break;
不对呀,大哥我把代码运行了一遍,结果就是0,0呀
58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀
方便把你的代码粘贴上来让我调试一下吗? #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;
} isdkz 发表于 2022-3-1 22:42
可能是题目印错了,我之前见过差不多一模一样的代码,
才发现你的外层也是 switch(y)
我知道你什么意思,但是书上第一层写的是switch(y)但是答案写的振振有词,我就想着是答案错了 58869333 发表于 2022-3-1 22:38
不对呀,大哥我把代码运行了一遍,结果就是0,0呀
不好意思,是我看错了,我之前见过差不多一模一样的代码就想当然了,
不过你那个没有 0,0 的答案,很可能外层就是 switch(x) 的,可能试卷印错了 58869333 发表于 2022-3-1 22:45
我知道你什么意思,但是书上第一层写的是switch(y)但是答案写的振振有词,我就想着是答案错了
哦哦,不好意思,我看错了,我之前看了差不多一模一样的代码就想当然了,
没注意到那里是 y {:5_96:} 总之非常感谢{:5_109:} 总之非常感谢{:5_109:}
页:
[1]