关于 if else if

对于if else if我一直分得非常不清楚  在这上面错了很多次

写下今天的一点小感想。

#include <stdio.h>

int main()
{
    int a, b ;
   int m ;
scanf(
"%d %d %d", &a, &b, &m); if( a == 1 && m == 1 ) printf("a=%d\n", a); else if( b == 1 ) printf("a=%d b=%d", a, b); else if(b==2) printf("a=%d b=%d", a, b); return 0; }

X代表任何整数

若输入1,X,1 则输出a=1;
若输入2,1,1 则输出a=2,b=1;

若输入2,2,1 则输出a=2,b=2;

 

若输入1,X,0 则输出a=1,b=X; 

若输入2,1,0 则输出a=2,b=1;

若输入2,2,0 则输出a=2,b=2;

 

其实它的原理就是首先执行if(a==1 && m==1),若为真,输出a=1,直接return 0,不会再检查其他的else if

否则执行else if( b == 1 ) 此时他已经不管a是否为1,都会判断第二、三条else if。

我一开始以为后面的else if 中的a一定不为1, 其实是错误的。 它只排除了后面的情况一定没有a=1和m=1的情况

而a、m各自是否为1 是不确定的

 

要实现我刚才的功能, 语句应改为

#include <stdio.h>

int main()
{
    int a, b, m ;
    scanf("%d %d %d", &a, &b, &m);
    if( a == 1 )
    {
        if( m == 1)
            printf("a=%d\n", a);
        return 0;
    }
    else if( b == 1 )
        printf("a=%d b=%d", a, b);
    else if(b==2)
        printf("a=%d b=%d", a, b);
    return 0;
}

 

 判断语句是否为真,若真,直接返回,若假(只排除了括号里面的一种情况),继续判断下条else if 直至结束

 

posted @ 2013-01-07 13:42  April_Tsui  阅读(188)  评论(0编辑  收藏  举报