我不明白为什么这两个人有不同的输出
有两个简单的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");
}
}
}
}
这给出了这个输出:一个两个结束
答案 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
语句,您可能会发现程序的输出更容易理解。