根据优先级后缀增量具有比<=
更高的优先级,所以当我运行这个程序时,为什么我得到输出为5?
示例相反,它应该执行为
当一个= 1
检查While条件1++<=1
检查While条件
然后printf应该打印3
#include <stdio.h>
int main()
{
int a=1;
while(a++<=1)
while(a++<=2);
printf("%d",a);
return 0;
}
这更多地与后缀operator++
的语义有关,而不是优先级。
1)检查外停车条件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;
}
因为我使用了大括号
编辑:我希望你们知道当跳出循环时A仍然是5 ?但至少你可以在循环中使用a
它是5,因为您在每个循环中添加1,即使在最后一个循环中,当条件不为真