C 知识量:16 - 74 - 317
使用条件运算符和if else语句很容易编写二选一的程序,但是有时选项会很多,使用if else语句就不是很方便了,这时可以使用switch语句。以下是一个示例:
#include <stdio.h> int main(void) { int x; printf("Please input a integer(1~10) for x:"); scanf("%d", &x); printf("The input integer is:"); switch (x) { case 1:printf("one"); break; case 2:printf("two"); break; case 3:printf("three"); break; case 4:printf("four"); break; case 5:printf("five"); break; case 6:printf("six"); break; case 7:printf("seven"); break; case 8:printf("eight"); break; case 9:printf("nine"); break; case 10:printf("ten"); break; default:printf("Something is wrong!"); } system("pause"); return 0; }
运行结果为:
Please input a integer(1~10) for x:6 The input integer is:six
如果输入的整数是6,那么就会打印six。
switch的工作原理涉及以下重要内容:
要对紧跟在关键字switch后圆括号中的表达式求值。
将switch后圆括号中的表达式值与标签列表(即各case部分)的值进行匹配检测,如果有匹配的值,就跳转到该case行,执行该case后面的语句。
程序会执行匹配的case值后面的所有语句,直到遇到花括号,结束switch语句(但这样失去了选择的意义)。
应当借助break语句,让程序执行完正确的case语句后,及时离开switch语句,跳转至switch语句后面的下一条语句,而不是一直执行到遇到花括号才结束switch语句。
default用于没有任何case值匹配的情况,是一个兜底的安排,它是可选的。
需要注意的是:
break语句可以用于循环和switch语句中,而continue语句只能用于循环中。但是,如果switch语句在一个循环中,continue便可以作为switch语句的一部分,continue语句让程序跳出循环的剩余部分,包括switch语句的其他部分。
switch在圆括号中的测试表达式的值应该是一个整数值,包括char类型。
case标签必须是整数类型(包括char类型)的常量或整型常量表达式。不能用变量作为case标签。
可以在case中使用多重标签。多重标签即多个case值共享一条执行语句的情况,例如:
#include <stdio.h> int main(void) { int x; printf("Please input a integer(1~10) for x:"); scanf("%d", &x); switch (x) { case 1: case 2: case 3: case 4: case 5:printf("The integer <=5"); break; case 6: case 7: case 8: case 9: case 10:printf("The integer >5"); break; default:printf("Something is wrong!"); } system("pause"); return 0; }
运行结果为:
Please input a integer(1~10) for x:4 The integer <=5
什么时候使用switch?什么时候使用if else?总的看法是:如果是浮点类型的变量或表达式来选择,就无法使用switch。而根据变量范围决定程序流的去向时,使用switch会很麻烦,因为可能需要列出很多case标签。但是,通常switch运行更快一些,生成的代码也少。如果只是少量整数类型的判断,使用switch更合适。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6