字符型函数内部多重for循环仍可用return返回字符
char IsWin(char board[ROW][COL], int row, int col)
{
for (int x = 0; x < row - 1; x++)
{
for (int y = 0; y < col - 1; y++)
{
if (x + 2 < row && y + 2 < col)
{
for (int a = 0; a < 2; a++)//九宫格情况的三子棋输赢规则
{
if (board[x + a][y] == board[x + a + 1][y] && board[x + a + 1][y] == board[x + a + 2][y] && board[x + a][y] != ' ')//判断一行三个
return board[x + a][y];
/*else if (board[x + a][y] == board[x + a + 1][y] == board[x + a + 2][y] == '#' != ' ')
return '#';*/
}
for (int b = 0; b < 2; b++)
{
if (board[x][y + b] == board[x][y + b + 1] && board[x][y + b + 1] == board[x][y + b + 2] && board[x][y + b] != ' ')//判断一列三个
return board[x][y + b];
/*else if (board[x][y + b] == board[x][y + b + 1] == board[x][y + b + 2] == '#' != ' ')
return '#';*/
}
if (board[x][y] == board[x + 1][y + 1] && board[x + 1][y + 1] == board[x + 2][y + 2] && board[x][y] != ' ')//判断对角线
return board[x][y];
/*if (board[x][y] == board[x + 1][y + 1] == board[x + 2][y + 2] == '#' != ' ')
return '#';*/
if (board[x + 2][y] == board[x + 1][y + 1] && board[x + 1][y + 1] == board[x][y + 2] && board[x + 2][y] != ' ')
return board[x + 2][y];
/*if (board[x + 2][y] == board[x + 1][y + 1] == board[x][y + 2] == '#' != ' ')
return '#';*/
//判断平局
int ret = IsFull(board, row, col);
if (ret == 1)
{
return 'Q';
}
return 'C';
}
}
}
}
通过返回的字符赋值给“ret”来判断是否跳出落子部分循环
void game()
{
char board[ROW][COL];
Initboard(board, ROW, COL);//初始化棋盘为空格
DisplayBoard(board, ROW, COL);//打印棋盘
//玩家走再电脑走(电脑难度:简单困难)
char ret = 0;
while (1)
{
PlayerMove(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判断玩家输赢
ret = IsWin(board, ROW, COL);
if (ret != 'C')//只要不等于'C'包括'*','#','Q',提供获胜后跳出while循环
break;
CpMove(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判断电脑输赢
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
}
if (ret == '*')
{
printf("玩家胜利\n");
}
else if (ret == '#')
{
printf("电脑胜利\n");
}
else
{
printf("平局\n");
}
}
break只跳出一层循环