一、问题
C语⾔中有两个构成选择结构的语句,即构成双分⽀的让if..else 语句和构成多分⽀的 switch..case 语句,switch 语句的基本格式是什么?
二、解答
switch (表达式){case 常量表达式 1:语句1;break;case 常量表达式 n:语句n;break;default:语句 n + 1;}
switch 后的表达式是任意类型的表达式,case 后的常量表达式只能是整型或字符型。 它的执⾏过程是:
先求 switch 后的“表达式”的值。然后在后⾯的多个 case 中查找此值,如果找到相等的,则执⾏下⾯的对应语句,直到遇到⼀个 break 为⽌。如果没有 break 的话,将会执⾏到下⼀个 case下的语句。如果 switch 表达式的计算结果与所有 case 均不相等,则执⾏ default 后的语句。default 也可以没有,即都不相等什么也不执⾏。
脚下留神:在 switch 语句中,当找到与 swith 表达式相等的 case 时,执⾏ case 下的语句。case 下的所有语句都执⾏完成后,如果⼀直没有 break,那么程序将会执⾏到下⼀个 case,⽽不管它的值是否与 switch 表达式相等,即多个 case 之间不具有天然的互斥性。要想使程序执⾏完⼀个 case后的语句,⽽不进⼊下⼀个 case,必须使⽤ break 语向,使程序退出 switch 结构。这样,后⾯的 case 也就不执⾏了。
看以下程序的执⾏结果:
#include int main(){int a, b;a = 4;switch (a % 2){case 0:b = 10;case 1:b = 20;}}
以上程序执⾏的结果是20。 4%2 结果是0,应该显示10 才对呀,怎么会是20呢?原因就在于赋值语句 b=10 执⾏之后,因为没有 break 语句,那就再向下执⾏,进⼊ case 1,再执⾏ b=20,因此最后的结果显示为 20。要想让它能够显示 10,需要在 b=10 的后⾯,case 1 的前⾯加上⼀⾏“break;”(包括分号;),这样就可以得出10了。
三、总结
switch 语句不具备互斥功能,给写程序添加了⼀个⿇烦,即再多写⼀个 break,但它也为多个 case 共⽤⼀组执⾏语句提供了条件。