英国坎特伯雷:请教CASE语句在C语言中的用法

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/18 22:05:55
main()
?? { int i;
?? for(i=0;i<3;i++)
?? switch(i)
?? {
?? case 0:printf("%d",i);
?? case 2:printf("%d",i);
?? default:printf("%d",i);
?? }
?? }
?? 程序运行后的输出结果是
这个程序怎么解释

这是初学者经常会无法理解的一点!
switch(i)
{
case 0:printf("%d",i);break;/*这里如果没有加上break语句,程序将会在不作继续判断i值的情况下,执行下面其它case后面(包括default)的语句*/
...
}
因此,当i=0时,将会执行所有三个printf函数;
当i=1时,执行default处的printf函数;
当i=2时,执行后两个printf函数,
所以输出共6个i值,结果为:
000122

switch(表达式){
case常量表达式1: 语句1;
case常量表达式2: 语句2;

case常量表达式n: 语句n;
default : 语句n+1;
}

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

void main(){
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
}

本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况, C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

那个I 是几,就从CASE几开始看,I 是0就看CASE 0,然后后面的都要输出,CASE是1就从CASE1开始看,后面的也都输出,如果I 既不是0,也不是1,那就从DEFAULT输出。

没有BREAK
输出
000122

每个 CASE 一般最后要加上 BREAK