一个“所有人”都忽略的小‘bug’------Switch成绩等级转换时遇到的小插曲

 在课上大家敲的源程序都是这样的......

/*****************************************************
    > File name: switch.c
    > Author: Mr.Dong
    > 日期: 2018-07-24 20:59
*****************************************************/

#include <stdio.h>

int main()
{
    int score;
    printf("please input score: ");
    scanf("%d",&score);
    score /= 10;

    if(score < 0 || score >100)
        printf("Input is error\n");
    else
    {
        switch(score)
        {
            case 10:
                printf("Very Good\n");
                break;
            case 9:
                printf("A\n");
                break;
            case 8:
                printf("B\n");
                break;
            case 7:
                printf("C\n");
                break;
            case 6:
                printf("D\n");
                break;
            default:
                printf("fauled\n");
                break;
        }
    }
    return 0;
}

很漂亮是不是,我想大部分人都是这样去做的,用了很多值去测试,发现很“完美”,但却隐藏了一个小问题。

在对score进行取整处理时,我们直接进行了判断处理,注意:这个score已经不是我们的初始值了,假如输入:102,依然会进入case 10的语句中,但这并不是我们想要的。

所以,我们引入了一个temp变量,来保存一下我们的score,或者,将取整操作放到判断后面,这样我们的程序就变得完美无缺了!


    int temp = score; //不对score的值进行更改 
    score /= 10;

    if(temp < 0 || temp >100)
        printf("Input is error\n");
    else
    {
        switch(score)
       

    //或者将取整操作放到判断后面

    if(score < 0 || score >100)
        printf("Input is error\n");
    else
    {
        score /= 10;

        switch(score)
        {
            ......
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值