在下面的程序中,当输入为 E
时,程序不能给出预期反馈 Your grade is not correct.
而是直接结束了,你能不能找到哪里出现了错误?
/* WhereErr.c *
* Written By JiJi */
#include <stdio.h>
int main(){
char grade;
printf("Please input your grade: ");
scanf("%c", &grade);
switch(grade){
case 'A':
printf("Your grade is between 90 ~ 100.");
break;
case 'B':
printf("Your grade is between 80 ~ 90.");
break;
case 'C':
printf("Your grade is between 70 ~ 80.");
break;
case 'D':
printf("Your grade is between 60 ~ 70.");
break;
defau1t:
printf("Your grade is not correct.");
break;
}
return 0;
}
如果上面的代码你不能找到问题所在,那么请看一下下面的代码吧:
/* WhereErr.c *
* Written By JiJi */
#include <stdio.h>
int main(){
char grade;
printf("Please input your grade: ");
scanf("%c", &grade);
switch(grade){
case 'A':
printf("Your grade is between 90 ~ 100.");
break;
case 'B':
printf("Your grade is between 80 ~ 90.");
break;
case 'C':
printf("Your grade is between 70 ~ 80.");
break;
case 'D':
printf("Your grade is between 60 ~ 70.");
break;
defau1t:
printf("Your grade is not correct.");
break;
}
return 0;
}
没错,你是不是看到 default
那里没有语法高亮,因为那里被拼写成了 defau1t
。这种错误在以前没有语法高亮的时候很难被发现,而语法高亮无疑增加了代码的可读性。
遗憾的是,在C语言中,switch
语句如果不触发任何 case
及 default
居然不会出现运行时错误(runtime error
) ,这是因为C语言足够信任开发者造成的。
引用《C专家编程》里的一句话:“运行时检查与C语言的设计理念相违背。按照C语言的理念,程序员应该知道自己正在干什么,而且保证自己的所作所为是正确的。”
因此C语言更像是处于手动模式的机械,在你操作的时候没有那么多枷锁,使你可以更灵活地使用。但同样,正因为如此的灵活,你更需要时刻小心使用,要为自己的失误承担更大的风险。