根据优先级,后缀增量的优先级高于 <= 为什么我得到输出为 5
According to precedence Postfix increment has higher precendence than <= why i get Output as 5
根据优先级,后缀增量的优先级高于 <=
所以当我 运行 这个程序时,为什么我得到输出为 5?
Example
相反,它应该执行为
当 a=1
检查 While 条件 1++<=1
检查 While 条件 2++<=2
然后 printf 应该打印 3
#include <stdio.h>
int main()
{
int a=1;
while(a++<=1)
while(a++<=2);
printf("%d",a);
return 0;
}
是5,因为你每次循环加1,即使是最后一次循环,当条件不成立时
这更多地与后缀的语义有关 operator++
而不是优先级。
1) 检查外部 while 条件 1++<=1
。 LHS 的计算结果为 1
,因此我们进入内部 while
。 a
增加到 2
。
2) 检查内部 while 条件 2++<=2
。 LHS 的计算结果为 2
,条件满足。 a
增加到 3
.
3) 检查内部 while 条件 3++<=2
。 LHS 计算为 3
,条件不满足,a
递增为 4
。我们回到外循环。
4) 检查外循环条件4++ <= 1
。这失败了,循环结束,并且 a
增加到 5
.
经过这么多评论,我应该给你你期望的输出。
试试这个:
#include <stdio.h>
int main(void)
{
int a=1;
while(a++<=1){
while(a++<=2){
printf("%d",a);
}
}
return 0;
}
就因为我用了BRACES
编辑:
我希望你知道当你脱离循环时 A 仍然是 5,好吗?但至少你可以在那个循环中用 a when a reach 3 做一些事情。
根据优先级,后缀增量的优先级高于 <=
所以当我 运行 这个程序时,为什么我得到输出为 5?
Example
相反,它应该执行为
当 a=1
检查 While 条件 1++<=1
检查 While 条件 2++<=2
然后 printf 应该打印 3
#include <stdio.h>
int main()
{
int a=1;
while(a++<=1)
while(a++<=2);
printf("%d",a);
return 0;
}
是5,因为你每次循环加1,即使是最后一次循环,当条件不成立时
这更多地与后缀的语义有关 operator++
而不是优先级。
1) 检查外部 while 条件 1++<=1
。 LHS 的计算结果为 1
,因此我们进入内部 while
。 a
增加到 2
。
2) 检查内部 while 条件 2++<=2
。 LHS 的计算结果为 2
,条件满足。 a
增加到 3
.
3) 检查内部 while 条件 3++<=2
。 LHS 计算为 3
,条件不满足,a
递增为 4
。我们回到外循环。
4) 检查外循环条件4++ <= 1
。这失败了,循环结束,并且 a
增加到 5
.
经过这么多评论,我应该给你你期望的输出。
试试这个:
#include <stdio.h>
int main(void)
{
int a=1;
while(a++<=1){
while(a++<=2){
printf("%d",a);
}
}
return 0;
}
就因为我用了BRACES
编辑: 我希望你知道当你脱离循环时 A 仍然是 5,好吗?但至少你可以在那个循环中用 a when a reach 3 做一些事情。