编程技术 / C语言 / switch
C语言中switch开关语句的流程控制叙述
1、switch ... case 叙述及表示法
解释:
§ 当status变量= case时则执行后面的运算式.
§ default是当status变量和所有的case都不相同时,就会执行default后的运算式.
但当运算式结束时,会继续往下把所有的运算式执行完毕。
switch ( status变量) /*status只能为整数、长整数或字符变量.*/
{
case 1:
运算式1;
case 2:
运算式2;
case 3:
运算式3;
default:
默认运算式;
}
其逻辑结构如图所示:

范例程序:输入一个字符,根据你输入的字符印出是否为a , b , c 或非为这三个字符
- #include<iostream.h>
- #include<stdlib.h>
- int main()
- {
- char c;
- cout << "输入一个英文字母:" ;
- cin >> c;
- switch( c )
- {
- case 'a':
- cout << " you pressed a ";
- case 'b':
- cout << " you pressed b ";
- case 'c':
- cout << " you pressed c ";
- default:
- cout << " not a, b, c ";
- }
- system("pause");
- return 0;
- }
2、switch ... case ... break 叙述表示法
解释:
break 叙述可以使得运算式结束后,直接离开区块{},不再执行区块中的其他运算式
switch ( status变量) /*status只能为整数、长整数或字符变量.*/
{
case 1:
运算式1; break;
case 2:
运算式2; break;
case 3:
运算式3; break;
default:
默认运算式;
}

范例程序:输入一个字符,根据你输入的字符印出是否为a , b , c 或非为这三个字符(加上break叙述)
- #include<iostream.h>
- #include<stdlib.h>
- int main()
- {
- char c;
- cout << "Input a char:";
- cin >> c;
- switch( c )
- {
- case 'a':
- cout << " you pressed a ";
- break;
- case 'b':
- cout << " you pressed b ";
- break;
- case 'c':
- cout << " you pressed c ";
- break;
- default:
- cout << " not a, b, c ";
- }
- system("pause");
- return 0;
- }
| C++ 控制结构 | 等同的Turbo Pascal 控制结构 |
| switch ( <表达式> ) { case <值1> : <情况1的语句1> ; <情况1的语句2> ; ... <情况1的语句n> ; break; case <值2> : <情况2的语句1> ; <情况2的语句2> ; ... <情况2的语句n> ; break; ...default: <缺省情况的语句1> ; <缺省情况的语句2> ; ... <缺省情况的语句n> ; } |
case <表达式> of <值1> : begin <情况1的语句1> ; <情况1的语句2> ; ... <情况1的语句n> end; <值2> : begin <情况2的语句1> ; <情况2的语句2> ; ... <情况2的语句n> end; ... else (*只在Turbo Pascal支援*) <缺省情况的语句1> ; <缺省情况的语句2> ; ... <缺省情况的语句n>end |
在这个控制结构中,case <值> :(C++中)及<值> : (Pascal中)是情况做标记。<顺序类型结构算式> 会先被计算,那些对应传递的值的语句会被执行,而其他的会被忽略。当传递的值并没有在任何一个情况出现时,就执行缺省情况(C++的default或Pascal的else)的语句会被执行。请看看以下程序
| C++ 版本 | Pascal 版本 |
| #include <iostream.h> main() { char grade; cout << "Grade: "; cin >> grade; switch (grade) { case 'A': case 'B': cout << "Good!" < < endl; break; case 'C': cout << "Average." << endl; break; case 'D': cout << "Fair." << endl; break; case 'F': cout << " Poor." << endl; break; default: cout << "Invalid grade!" << endl; } return 0; } |
program prog_14(input, output); var grade: char; begin write('Grade: '); readln(grade); case grade of 'A', 'B': writeln('Good!'); 'C': writeln('Average.'); 'D': writeln('Fair.'); 'F': writeln('Poor.'); else writeln('Invalid grade!') end end. |
| 输出结果一(红色的文字由使用者输入)︰ | |
| Grade: C Average. |
|
| 输出结果二(红色的文字由使用者输入)︰ | |
| Grade: X Invalid grade! |
|
在C++中,如果<表达式> 传递的值和情况标记的任何一个<值> 吻合,那么由该标记到break语句之间的所有语句都会执行。因此你会发现在下一个情况之前都有一个break语句。如果没有了这个break 语句的话,你可能会得到非预期的结果。以下程序作为参考例子,它和上面的程序差不多相同,不同的是下面的程序漏了一个 break语句。
| #include <iostream.h> main() { char grade; cout << "Grade: "; cin >> grade; switch (grade) { case 'A': case 'B': cout << "Good!" < < endl; break; case 'C': cout << "Average." << endl; //漏了一个break语句。 case 'D': cout << "Fair." << endl; break; case 'F': cout << "Poor." << endl; break; default: cout << "Invalid grade!" << endl; } return 0; } |
| 输出结果(红色的文字由使用者输入)︰ |
| Grade: C Average. Fair. |
从上面范例的输出结果,可以见到当等级是「C」的时候,「Average.」及「Fair.」都在画面上出现。这是因为显示「Average.」的语句之后没有 break语句,所以下一句(即显示「Fair.」那一句)都被执行。
注:其他的java switch语句、php、python等switch语句就类似以上c和c++了,详细将会在具体的课程中讲解。
-
java+andriod开发:switch 不能处理字符串类型
发布时间:2014-07-23 23:16:43 点击:171今天在使用 java 的 select case 时, 发现 switch 不能处理字符串类型, 真是神奇, 于是我设置了一组 enum, 可是当 emnu.valueOf(string) 里的 string 不存在 enum 里...
-
发布时间:2014-07-23 22:25:10 点击:103
还记得开始写android的时候,因为不熟悉源程序,看到这4个指令:for、while、if、switch的时候总是被这4种看似判断又像循环的指令搞混(特别是if和while)。 到底何种...
-
发布时间:2014-04-13 07:50:06 点击:121
java switch语句用法小结: switch语句(if语句的兄弟语句) 语法: switch(expression){case condition1:......break;case condition2:......break;case condition3:...
-
发布时间:2014-03-13 23:05:08 点击:180
以下是我在学习 java 代码时,对switch开关语句和if语句的练习,把源代码分享出来给大家,希望能够给初学者一个参考学习哦。 import java.util.Scanner; public clas...
-
发布时间:2014-07-22 00:56:52 点击:109
在C语言中,若要让程序有不同的执行流程,除了可以用if之外,还可以用switch,而且更为容易!switch结构简单又分明,非常适合拿来判断多项条件是否成立,不必项if一...
-
发布时间:2014-07-22 00:49:06 点击:82
其实一直不太清楚为什么 Python 内建的语法会没有 switch/case 的用法,所以这时候只好自己做一下了 如果本来在 C语言 里会写这样: x=0; switch (value){ case 1: x...
-
发布时间:2014-07-22 00:46:01 点击:170
Java中使用switch-case语句的说明: /* switch(expression:x){//x必须是byte,char,short,int的数据型态 case1:// //符合case1的程序区块 break;//跳出switch-case叙...
-
发布时间:2014-07-22 00:41:33 点击:147
switch 和 if else 很像,主要是用在多个条件的时候,然后又不想一直用else if 用法如下: switch (变量) case (变量条件1): 动作; break ; case (变量条件2): 动作; ...
-
发布时间:2014-07-21 23:51:50 点击:121
前一段时间被学弟问到switch有没有办法做区间的判断 例如: if (input90) .... else if (input80) ... else if (input70) ... else ... 当下的回答是不行 因为我的概...
-
CASE 指令,MySQL 的 switch 与 if else
发布时间:2014-07-22 00:36:52 点击:156今天在玩 CASE 这个指令,虽然已经在同学 黑色 深渊 的 Blog 中看到过了,为了明确了解这个指令的语法及功能,今天花了一点时间实证。 1、必须依附在 SELECT,UPDATE,...
-
发布时间:2014-07-22 00:30:48 点击:67
switch 的语法是: switch (计算式) { case 数值一: 指令集一; break ; . . . case 数值N: 指令集N; break ; default : 指令集 } 1、switch 后接一个计算式,其结果...
-
发布时间:2014-07-22 00:20:42 点击:192
1、switch用法,多重条件选择,须注意字符串不能使用 switch (a) { case 1: //要执行动作 break ; case 2: //要执行动作 break default : //要执行动作 break ; } 2、i...
-
发布时间:2014-07-21 23:55:52 点击:121
前一段时间被学弟问到switch有没有办法做区间的判断 例如: if (input90) .... else if (input80) ... else if (input70) ... else ... 当下的回答是不行 因为我的概...
-
发布时间:2014-07-21 22:23:00 点击:197
C 语言亦有提供多重选择的控制结构,使用关键字 switch 、 case 、 default 的陈述,形式如下 简单来说, switch 后头接一小括弧,小括弧内为一常数运算式,计算出常...
-
发布时间:2014-07-12 23:06:35 点击:199
在编写程序时, 经常会碰到按不同情况分转的多路问题, 这时可用嵌套if-else-fi语句来实现, 但if-else-if语句使用不方便, 并且容易出错。对这种情况, Turbo C2.0提供了...
- 共 1页15条记录



