📜  C语言switch语句(1)

📅  最后修改于: 2023-12-03 14:40:27.384000             🧑  作者: Mango

C语言switch语句介绍

在C语言中,有一种流程控制语句叫做switch语句。switch语句可以根据一个表达式的不同取值来决定不同的执行流程。

switch语句的语法

switch语句的语法如下:

switch (表达式) {
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    ...
    case 常量n:
        语句n;
        break;
    default:
        语句x;
        break;
}

其中,表达式可以是任何类型的表达式,常量1到常量n必须是整数类型的常量,default是可选的,如果没有default,则当表达式的值与所有常量都不匹配时,switch语句将不执行任何操作。

switch语句的执行流程

当进入switch语句时,表达式的值将被计算出来,然后根据表达式的值来匹配常量。如果常量与表达式的值匹配,则执行对应的语句,并跳出switch语句;如果没有匹配上,则执行default语句(如果有),并跳出switch语句;如果没有匹配上,并且没有default语句,则不执行任何语句。

需要注意的是,每个case语句后面必须要有一个break语句,否则程序将继续执行下一个case语句,直到遇到break或者default语句才会跳出switch语句。

switch语句的应用场景

switch语句通常用于多个分支中的一个作为程序的不同执行路径。例如,可以用switch语句来实现菜单系统或者状态机。

示例代码

下面是一个使用switch语句实现五子棋游戏的示例代码:

#include <stdio.h>

int main()
{
    int chessboard[15][15] = {0};  // 五子棋棋盘
    int turn = 0;  // 当前玩家(0表示黑子,1表示白子)
    int x, y;  // 落子位置
    int winner = -1;  // 胜者(-1表示游戏未结束,0表示黑子胜,1表示白子胜)

    while (winner == -1) {
        // 玩家输入落子位置
        printf("%s turn, please input your move (x,y):\n", turn == 0 ? "Black" : "White");
        scanf("%d,%d", &x, &y);

        // 判断落子是否合法
        if (chessboard[x][y] != 0) {
            printf("Illegal move, please try again.\n");
            continue;
        }

        // 玩家落子
        chessboard[x][y] = turn + 1;

        // 判断是否有人胜出
        // 这里只是一个简单的判断过程,实际的五子棋游戏需要更加复杂的判断规则
        int color = chessboard[x][y];
        int count = 0;
        int dx[] = {-1, 0, 1, 1};
        int dy[] = {1, 1, 1, 0};
        for (int i = 0; i < 4; i++) {
            int tx = x + dx[i];
            int ty = y + dy[i];
            while (tx >= 0 && tx < 15 && ty >= 0 && ty < 15 && chessboard[tx][ty] == color) {
                count++;
                tx += dx[i];
                ty += dy[i];
            }
        }
        if (count >= 4) {
            winner = turn;
        }

        // 切换玩家
        turn = 1 - turn;
    }

    // 输出胜者
    switch (winner) {
    case 0:
        printf("Black wins!\n");
        break;
    case 1:
        printf("White wins!\n");
        break;
    }

    return 0;
}

在这个示例代码中,我们使用switch语句来输出胜者信息。如果黑子胜,则输出"Black wins!";如果白子胜,则输出"White wins!"。