C

C 知识量:16 - 74 - 317

7.4 多重选择><

switch语句- 7.4.1 -

使用条件运算符和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的工作原理- 7.4.2 -

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标签。

多重标签- 7.4.3 -

可以在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的选择- 7.4.4 -

什么时候使用switch?什么时候使用if else?总的看法是:如果是浮点类型的变量或表达式来选择,就无法使用switch。而根据变量范围决定程序流的去向时,使用switch会很麻烦,因为可能需要列出很多case标签。但是,通常switch运行更快一些,生成的代码也少。如果只是少量整数类型的判断,使用switch更合适。