c - 预期变量没有变化,但一元运算符即使在 false if 语句中也能工作。为什么这样?

标签 c if-statement unary-operator

#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/

相关文章:

c - 这个 LLVM IR 代码有什么问题

java - 一元运算与赋值融合

c - 如何将字符串解析为 C 中的日期时间结构?

c - 更快的strlen?

java - 我怎样才能从 if block 中出来?

javascript - 我如何自动调整来自 flickr api 的照片的大小?

c - 一元 + 运算符是否进行类型转换?

c++ - C++中是否有 "normal"一元逻辑运算符

Objective-C:获取默认网关信息

javascript - 为什么设置 input.value 等于空字符串不会删除最近按下的键?