开关盒产生错误的输出

时间:2014-08-08 12:26:37

标签: c switch-statement output

输出应为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

5 个答案:

答案 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 ++);

所以输出正确!!!!!!

相关问题