[英]C while statement in switch clause
这道题来自我的C语言考试。 它要求结果。
#include <stdio.h>
int main()
{
int a = 4, b = 30;
printf("%d\n", a);
switch(a){
case 1: a = a*10; break;
case 2: a = a*10; break;
case 3: a = a*10;
while (a<b) case 4: {a = a+5;} break; //???
case 5: a = a*10; break;
default:
b = a*10;break;
}
printf("%d\n", a);
return 0;
}
结果是:
4
34
我知道while语句和switch语句的基本思想,但是不明白switch块的第四行是怎么回事。
我的猜测是 while 条件被测试 7 次,直到变量 a 达到 34(4<30,4+5+5+5+5+5+5 = 34)。 但是“情况 4”条件如何呢? 在将 5 添加到变量 a 之前不应该测试这个条件吗? 之后的“休息”怎么样? 我完全糊涂了。
谢谢!
while (a<b) case 4: {a = a+5;} break; //???
case 4
只是一个标签。
这等效于以下内容:
while (a<b)
some_label:
{
a = a+5;
}
break; //This will break out of the surrounding switch.
while (a<b) case 4: {a = a+5;} break;
这行代码在switch
语句中。 switch
所做的第一件事是跳转到case
标签4
。
但是这个案例标签在一个 while 循环中。 在a=a+5
指令结束时,程序“返回”到 while 指令。
在这个节目确实是执行goto
内部while
循环。
不鼓励使用goto
语句,除非在switch
块中具有完全清晰的结构,例如:
switch(a)
{
case 1: a = a*10; break;
case 2: a = a*10; break;
case 5: a = a*10; break;
default:
b = a*10;break;
}
如果你想变得聪明,省略break
,在break
和下一个case
之间插入指令......你必须意识到你在做什么。 阅读代码的其他人可能很难解释它。
这也意味着不要在循环结构或类似的奇怪事情中间跳跃。
如果您在现实生活中遇到这样的代码,请重写它。 等效的将使用do
... while
指令(跳过第一个测试,即使a<b
,我们也可以进入循环:
case 4: do {a = a+5;} while (a<b); break;
使用此代码可以获得相同的结果,除了它在编译时没有警告并且每个人都理解它的作用。
就像你说的,while(a < b)每次都会重复case 4,给a加5,当a大于30时,会跳出while循环,切换作用域。 然后它将打印现在等于 34 的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.