输出应为5 10 14 18
。但即使执行严格的默认情况,也会输出5 10 15 20
。
#include<stdio.h>
void main(void)
{
int i=0;
for(i=0;i<20;i++){
switch(i){
case 0: i+=5; break;
case 1: i+=2; break;
case 5: i+=5; break;
default: i+=4;
}
printf("%d \n",i);
}
}
Output -
5
10
15
20
输出不应该是5 10 14 18
?
答案 0 :(得分:6)
在每个i
循环中不要忘记1
增量for
。在switch
之前添加另一个调试打印,您可以看到它:
for(i = 0; i < 20; i++){
printf("before %d \n",i);
switch (i){
case 0: i+=5; break;
case 1: i+=2; break;
case 5: i+=5; break;
default: i+=4;
}
printf("after %d \n",i);
}
输出:
before 0
after 5
before 6
after 10
before 11
after 15
before 16
after 20
答案 1 :(得分:3)
让我们看看:
i = 0, case + 5 = i=5
i = 6, case + 4 = i=10
i = 11, case + 4 = i=15
i = 16, case + 4 = i=20
CPU是对的
答案 2 :(得分:1)
如果从i++
循环中移除for
,您应该得到预期的输出:
for(i=0;i<20;){
对于每次迭代,您都会在i
语句中递增switch
,以及for
循环的递增部分。
答案 3 :(得分:0)
在打印5次后,我变为6,然后它变为默认,其中我变为10并且10被预先打印。在此之后,for循环将其增加1并且i变为11.再次进入默认值,这使得i = 15,因此打印出15。再次,它增加1,for,并且变为19并再次进入默认值,我变为20.请在开关开始之前放一条线
printf("value of i before switch:%d\n",i);
这将使你清楚。 Plz请记住,for循环也增加了i的值。 不要在for循环中增加i的值以获得所需的结果。
答案 4 :(得分:-1)
这是正确的...正如你所看到的那样,如果情况为(0)那么你将(i)增加“i” {i - &gt; 5}然后在循环中的“i ++”之后它就成了(6)。 所以,然后切换情况将切换到“i”的其他情况下的默认值,因为“i”变为(6)然后“i”将在默认情况下递增(4)并在循环中递增(1)( i ++);
所以输出正确!!!!!!