woainilp 发表于 2020-5-3 21:43:51

C语言

#include<stdio.h>
void main()
{
int a=0,b=1,c=0,d=20;
if(a!=0) d=d-10;
else if(b==0)
if(!c) d=15;
else d=25;
printf("d=%d\n",d);
}
我想问一下为什么结果是20,第一个else后面的程序没有执行,是为什么

zltzlt 发表于 2020-5-3 21:47:19

你应该是掉进了 “悬挂 else” 的坑里。a 等于 0,b 不等于 0,所以不执行。

#include <stdio.h>
void main()
{
    int a = 0, b = 1, c = 0, d = 20;
    if (a != 0)
      d = d - 10;
    else if (b == 0)
    {
      if (!c)
            d = 15;
    }
    else
      d = 25;
    printf("d=%d\n", d);
}

qiuyouzhi 发表于 2020-5-3 21:48:44

1,是else if。
2,C语言的if是就近匹配的,也就是说,就近匹配后的代码应该是这样子的:

#include<stdio.h>
void main()
{
        int a=0,b=1,c=0,d=20;
                if(a!=0) d=d-10;
                else if(b==0)
                        if(!c) d=15;
                        else d=25;
        printf("d=%d\n",d);
}
可以发现,b如果不等于0,整个else if里面的东西都不会执行。
所以,d没有变化,就还是20.

woainilp 发表于 2020-5-3 22:21:50

qiuyouzhi 发表于 2020-5-3 21:48
1,是else if。
2,C语言的if是就近匹配的,也就是说,就近匹配后的代码应该是这样子的:



那我要是在第一个if后面加上一个printf(”%d”,a);
后面的elseif是不是就可以正常运行了

qiuyouzhi 发表于 2020-5-3 22:47:25

woainilp 发表于 2020-5-3 22:21
那我要是在第一个if后面加上一个printf(”%d”,a);
后面的elseif是不是就可以正常运行了

我想并不是,你得加上大括号,表示范围。
页: [1]
查看完整版本: C语言