标签:
if语句处理两个分支,处理多个分支时需使用if-else-if结构,但如果分支较多,则嵌套的if语句层就越多,程序不但庞大而且理解也比较困难.深层嵌套的else-if语句往往在语法上是正确的,但逻辑上却没有正确地反映程序员的意图。例如,错误的else-if匹配很容易被忽略。添加新的条件和逻辑关系,或者对语句做其他的修改,都很难保证正确性。因此,C/C++语言又提供了一个专门用于处理多分支结构的条件选择语句,称为switch语句,又称开关语句.它可以很方便地来实现深层嵌套的if/else逻辑。
switch语句的一般形式为:
switch(表达式)
{
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
……
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
早几天做到一道switch语句相关的作业题,当时莫名想到case后面可不可以接范围表达式,因为感觉也算是常量表达式吧。搜了好久才找到几个相关问题,大部分回答还是不可以,结果在少数几个回答中说是gcc标准下编译可以,代码如下(这是我在devC上运行编译的,成功了,TC3.0就不行了):
1 #include<stdio.h> 2 int main () 3 { 4 char my_string[] = "hello there"; 5 char ch; 6 7 printf("please input a char :"); 8 ch = getchar(); 9 10 switch(ch) 11 { 12 case ‘0‘ ... ‘9‘: 13 printf("you enter a digit\n"); 14 break; 15 case ‘a‘ ... ‘z‘: 16 printf("you enter a lower case letter\n"); 17 break; 18 case ‘A‘ ... ‘Z‘: 19 printf("you enter a upper case letter\n"); 20 break; 21 default: 22 printf("I don‘t know what you enter :-)\n"); 23 break; 24 } 25 }
运行结果:
devC运行成功,而TC3.0却不允许“. . .”这个符号:
还是依编译器而异吧。
不过看到那么多人斩钉截铁地说不行也是心有感慨呢,应该都知道编译器有各种差异吧,但还是能那样肯定的否定,尤其在楼上已经放出成功运行的答案的情况下。也有人说书上有明确说过不可以,但这不是行得通吗?
对于机器的原理、思维现在也还是可以说是一窍不通,既然并不熟悉,就不该轻易地说出绝对的话吧。书上也从没讲过". . ."这玩意儿的用法,所以今天对我而言就像发现新大陆一样,即便只是一个小小的符号的用法
【END】
标签:
原文地址:http://www.cnblogs.com/suzyc/p/4414783.html