📅  最后修改于: 2023-12-03 14:40:27.384000             🧑  作者: Mango
在C语言中,有一种流程控制语句叫做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语句;如果没有匹配上,则执行default语句(如果有),并跳出switch语句;如果没有匹配上,并且没有default语句,则不执行任何语句。
需要注意的是,每个case语句后面必须要有一个break语句,否则程序将继续执行下一个case语句,直到遇到break或者default语句才会跳出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!"。