问答详情
源自:4-3 分支结构之多重if-else语句

看下这个语句白金玩家那有什么错误?

#include <stdio.h>
int main()
{
    int score = 7200;
    //完善一下代码
    if(score>10000)
    {
        printf("钻石玩家");
    }
    else if(score>=5000)
    {
        printf("白金玩家");   
    }
    else if(5000>score>=1000)  
    {
        printf("青铜玩家");    
    }
    else(score<1000)
    {
        printf("普通玩家");   
    }
    return 0;
}

提问者:qq_简简单单_35 2015-10-17 09:14

个回答

  • onemoo
    2015-10-17 15:16:21
    已采纳

    第三个 else if 中判断表达式你写的是 5000>score>=1000,这无法完成区间判断的功能,此表达式永远为 false。

    你可以查看一下运算符的优先级,> 和 >= 优先级相同,且左结合,故C语言是这样解释这个表达式的:

    (5000 > score) >= 1000

    也就是会先算 5000 > score,结果肯定是true。于是表达式后面的部分就变成了true与1000做比较。为了能和1000这个整型做比较,true也会被转换为整型,这样true就被转换成了整型数字1,所以整个表达式就是 1 >= 1000,显然结果是false。


    要实现区间判断,应该用逻辑与运算符连接两个关系运算符:5000 > score && score >= 1000


    还有如楼上所说,最后一个else后面不应加上判断部分。 只有 if 后可以加上小括号括起的判断表达式,况且经过前面几个 if 的筛选,这里肯定是小于1000的数,也无需再用else if来判断了。

  • 世界和平ad
    2015-10-17 09:22:01

    最后的else错了 

    else(score<1000)  //这里不需要条件的orz。。。。

    else{
        printf("普通玩家"); 这样就ok了
    }