C语言里面这个为啥输出结果为0

#include
main()
{
int x=1,y=0;
if (!x)y++;
else if(x==0)
if(x)y+=2;
else y+=3;
printf("%d\n",y);
}

因为一堆if...else一个都没执行,所以y还是0。整理一下你的逻辑就明白了

main()
{
    int x=1,y=0;
    if (!x)
       y++;
    else if(x==0)
    {
          if(x)
              y+=2;
          else 
              y+=3;
    }
    printf("%d\n",y);
}

x=1,这样if(!x)和else if(x==0)都不满足,所以啥也没干

x是1,转换成bool值就是true,!x取反就是false,所以if没有进
else if(x==0),x是1,比较不成功,也没有进
下面两个if,else是嵌套在上面的else if里面的,外层if都没有进,内层的if当然也根本不会执行
所以y的值根本就没变

注意你的if分支对应,一般最好给if分支下带{}标明分支的范围

img

img