在课上大家敲的源程序都是这样的......
/*****************************************************
> 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)
{
......
}