问答详情
源自:4-16 分支结构之switch语句

帮我看看这个为啥不对

#include <stdio.h>
int main()
{
    int score = 87; //考试分数为87分
      
    switch(score)
    {
        /*想想以下代码为什么用这种方式;
          这种方式的好处?*/
        case 100:
        case score<100&&score>=90:
            printf("等级A");
            break;
        case score<90&&score>=80:
            printf("等级B");
            break;          //这里是不是缺点什么?           
       
        case score>=60&&score<=79:
            printf("等级C");
                  break;          //这里是不是缺点什么? 
        default:
            printf("等级D");
            break;   
    }
    return 0;
}

提问者:小休闲Cyrus 2015-09-04 10:27

个回答

  • onemoo
    2015-09-04 10:42:32
    已采纳

    switch 语句的作用是把switch后面括号中的变量和case后的值做匹配,匹配上之后就从那个case开始向下执行(同时忽略掉后面的case标号,连同后续case中的语句一起执行下去)。

    case后的那个值只能是整型常量,而且只用于和switch后括号中的变量做比较,不能用来做判断。

    你代码中case后是由两个条件判断表达式组成的逻辑表达式,其结果是ture或false,因为case后只接受只接受整型常量,所以编译器会报错。

  • dire
    2015-09-26 03:27:08

    这是一个小技巧..

  • Jakes
    2015-09-04 10:37:41

    case选择语句的值应该是常量表达式,不能是条件表达式。你的代码可以改为:

    switch(score/10)
    {
        case 10:
        case 9:
            printf("等级A");
            break;
        case 8:
            printf("等级B");
            break;       
        
        case 6:
        case 7: 
            printf("等级C");
                  break;
        default:
            printf("等级D");
            break;    
    }