为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不管我设置score为多少分,输出结果都是:等级D 呢?

#include<stdio.h>

int main() {

int score = 87; 

 switch(score){

   case 1:score>=90&&score<=100;printf("等级A") ;break;

  case2:score>=80&&score<=90;printf("等级B"); break;

  case3:score>=60&&score<80; printf("等级C");break;

   default:score<60; printf("等级D");break;

 }   

 return 0; 

}

正在回答

3 回答

因为score的原始值是87,而switch(score)是直接判断score的值,case 1  就代表当score的值为1的时候,case 1:  冒号后面即是score == 1时执行的语句,所以说最score落到default里了,输出等级D。下面是根据源代码做的一点修改就能实现判断。只需要判断score的十位数

#include<stdio.h>

int main()
{
    int score = 87;
    score = score/10;        /*下面的break好理解,关键就是这里。因为case后面带的值就是switch()括号里面的变量所代表的值,所以我这里做的处理是把score除10,因为score为int整型,所以除10之后个位数自动删去,得到8。这个8便能用到下面的switch语句中了。*/
      switch(score)            //这里score=8;
    {
        case 10:
        case 9:
            printf("等级A");        //当score=10或者9的时候,得到『等级A』
            break;
        case 8:
            printf("等级B");        //当score=8时,得到『等级B』
            break;            
        case 7:
        case 6: 
            printf("等级C");        //当score=7或6时,得到『等级C』
            break;
        default:
            printf("等级D");        //在上面的score取值情况外,全部得到『等级D』
            break;    
    }
                                    /*所以说整个对score的值是做了一个处理的,因为只需要判断区间,即只需要判断score的十位数,所以做上面的除10的处理。*/
    return 0;
}

如果懂了的话就采纳一下哟!

1 回复 有任何疑惑可以回复我~
#1

半暖微凉 提问者

非常感谢!
2015-12-16 回复 有任何疑惑可以回复我~
#2

Mr_Happens 回复 半暖微凉 提问者

没事,嘿嘿,我是计算机专业的,平时也会学C语言,不过才大一,还很菜呢。^_^
2015-12-16 回复 有任何疑惑可以回复我~

你好像没理解case后面应写什么。

switch会将score的值与下面case后面的值(case之后,冒号之前)做匹配,匹配上就执行那个case冒号后面的语句。score和所有case都不匹配的话,就执行default: 后面的语句。

所以,你这样写,三个case分别是1 2 3,只有在score是1 2 3时才会执行相应case后的语句。而score是87,只会跳到default那里,执行default后面的语句。

0 回复 有任何疑惑可以回复我~

public static void main(String[] args) {


int score = 1; 

switch(score)

case 1:

System.out.println("A");

break;

case 2:

System.out.println("B");

default :

System.out.println("C");

}


}

原理一样,凑合看

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不管我设置score为多少分,输出结果都是:等级D 呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信