切换没有休息和i ++ vs ++ i

时间:2013-06-21 21:48:13

标签: c switch-statement

我不明白为什么这两个人有不同的输出

有两个简单的c程序

int main()
{
    int i;
    for (i = 0;i<3; i++)
            {
              switch (i++)
              {
               case 0:
               {
                 printf("zero");
               }
               case 1:
               {
                printf("one");
               }

               case 2:
               {
               printf("two");
               break;
               }

              default:
               {               
                printf("end");
               }                
        }
     }
}

这给出了这个输出:零一两二

在这种情况下切换后变量i的值从0变为1?

int main()
{
    int i;
    for (i = 0;i<3; i++)
     {
         switch (++i)
         {
            case 0:
            {
                printf("zero");
            }
            case 1:
            {
                printf("one");
            }

            case 2:
            {
                printf("two");
                break;
            }

            default:
            {             
                printf("end");
            }   

        }
     }
}  

这给出了这个输出:一个两个结束

4 个答案:

答案 0 :(得分:4)

switch (i++)
     {
     }

与:

相同
int j=i;
i++;
switch (j)
    {
    }

,而

switch (++i)
     {
     }

与:

相同
i++;
switch (i)
    {
    }

答案 1 :(得分:0)

在第一个你有开关(i ++)这意味着程序将在完成开关案例后将i加1,而另一个程序有++ i意味着程序在进入开关之前会加1情况下。

答案 2 :(得分:0)

i++++i进行比较称为后缀和前缀增量。第二种情况是i,但在通过switch之前会增加1。此外,case 3:会因此而发生,但由于它不存在default将在循环的最后一步发生。

答案 3 :(得分:0)

假设i的值为0。然后

  • i++评估为0。这是后增量运算符。
  • ++i评估为1。这是预增量运算符。

在这两种情况下,i的值都会增加1

后期增量和预增量运算符之间的区别在您的教科书中有明确解释。

哦,我还应该说你的main函数声明不正确。它应该是int main(void)

如果添加了缺少的break语句,您可能会发现程序的输出更容易理解。