-5

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

有两个简单的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

4 回答 4

4
switch (i++)
     {
     }

是相同的:

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

尽管

switch (++i)
     {
     }

是相同的:

i++;
switch (i)
    {
    }
于 2013-06-21T22:04:53.410 回答
0

在第一个你有 switch(i++) 这意味着程序将在完成 switch case 后将 i 加 1,而另一个程序有 ++i 意味着程序将在进入 switch case 之前加 1。

于 2013-06-21T21:51:23.273 回答
0

使用i++比较++i被称为后缀和前缀增量。第二种情况,i在通过switch. 此外,case 3:将因此发生,但由于它不存在,因此default将在循环的最后一步发生。

于 2013-06-21T21:51:40.390 回答
0

假设i具有值0。然后

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

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

您的教科书中清楚地解释了后增量和前增量运算符之间的区别。

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

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

于 2013-06-21T21:51:41.060 回答