开关盒产生错误的输出

Ari*_*Das 0 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
Run Code Online (Sandbox Code Playgroud)

输出不应该是5 10 14 18

Yu *_*Hao 6

不要忘记每个循环中的i增量.之前添加另一个调试打印,您可以看到它:1forswitch

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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

before 0 
after 5 
before 6 
after 10 
before 11 
after 15 
before 16 
after 20 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,通过执行`for(i = 0; i <20;)`可以轻松删除此行为,如果这是OP所希望的.真的,`i = 0; 而(i <20)`则更合适. (2认同)