请问第一个为啥要填else if 怎么判断

img

回答:很容易理解,代码如下(它的空行不一定都一样,行数可能会有变化):

#include<stdio.h>
int main()
{
    int m;
    printf("Input m:");
    scanf("%d",&m);
    if(m>0)
    {
        if(m%2==0)
        {
            printf("%d is a positive even\n",m);   //是正偶数 
        }
        else
        {
            printf("%d is a positive odd\n",m);    //是正奇数 
        }
    }
    else if(m<0)
    {
        if(m%2==0)
        {
            printf("%d is a negative even\n",m);   //是负偶数 
        }
        else
        {
            printf("%d is a negative odd\n",m);    //是负奇数 
        }
    }
    else
    {
        printf("%d is a zero .It is an even\n",m); 
    }
    return 0;
}

这里用的是 else if,其实用if,会导致出现判断出错,因为else和它最近的if相连,没有与之匹配的,会出错,加入else if语句,是为了看起来好看和表达起来容易理解,下面这个代码也可能完成一样的功能,分成三种情况,不符合if 条件就直接过,三个里面只会有一个符合

#include<stdio.h>
int main()
{
    int m;
    printf("Input m:");
    scanf("%d",&m);
    if(m>0)
    {
        if(m%2==0)
        {
            printf("%d is a positive even\n",m);   //是正偶数 
        }
        else
        {
            printf("%d is a positive odd\n",m);    //是正奇数 
        }
    }
    if(m<0)
    {
        if(m%2==0)
        {
            printf("%d is a negative even\n",m);   //是负偶数 
        }
        else
        {
            printf("%d is a negative odd\n",m);    //是负奇数 
        }
    }
    if(m==0)
    {
        printf("%d is a zero .It is an even\n",m); 
    }
    return 0;
}

这是常规的用法


if() 
{
}
else if ()
{
}
else
{
}

回答:你说的应该是这种情况,代码如下:

#include<stdio.h>
int main()
{
    int m;
    printf("Input m:");
    scanf("%d",&m);
    if(m>0)
    {
        if(m%2==0)
        {
            printf("%d is a positive even\n",m);   //是正偶数 
        }
        else
        {
            printf("%d is a positive odd\n",m);    //是正奇数 
        }
    }
    if(m<0)
    {
        if(m%2==0)
        {
            printf("%d is a negative even\n",m);   //是负偶数 
        }
        else
        {
            printf("%d is a negative odd\n",m);    //是负奇数 
        }
    }
    else
    {
        printf("%d is a zero .It is an even\n",m); 
    }
    return 0;
}

注意,此时,当输入大于0的数,判断,第一个符合,而第三个同样不会跳过,会输出* is a zero的结果,这与我们所想的并不符合,产生的原因是,else只与最接近的if组合,按上面这种写法,大于0时不会跳过,造成错误了,因为是三种情况选一种,上面的结构不符合,通过运行结果可能更容易帮助你理解,截图如下:

img