#include<stdio.h>
int main(){
int y=15;
if(y++>19 && y++!=21 && y++>21)
printf("%d",y);
else
printf("%d",y);
return 0;
}
我预计输出为 15 甚至 18,但它给出了 16,我不知道为什么。
最佳答案
此处 y++>19 ==> y 与 19 进行比较,然后由于后缀++ 而递增。 因此,y++>19 实际上被评估为 15>19,然后 y 递增并变为 16。
因为 15>19 是假的,剩下的条件 y++!=21 && y++>21 不被评估,控制转到 else 条件并打印 y。由于上面的 y 已经变为 16,因此它打印 16。
请注意,在短路评估中,A && B && C,如果 A 被评估为真,则只有 B 被评估。 如果 A 和 B 都被评估为真,则只有 C 被评估。
因此,在您的情况下,由于 A 为假,因此不会对 B 和 C 进行进一步评估,并且控件只是输入它的其他部分并打印 y。
关于c - 预期变量没有变化,但一元运算符即使在 false if 语句中也能工作。为什么这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67130867/