三子棋,二维数组初始化无法完成,把数组元素转化为空格时变成了问号代码,如何解决

最近学到三子棋的编写,自己写的时候发现二维数组初始化无法完成,把数组元素转化为空格时变成了问号
代码:

void initboard(char board[ROW][COL])
{
    for (int i = 0; i < ROW; i++) 
    {
        for (int j = 0; j < COL; j++) 
        {
            board[i][j] = ' ';
        }
    }
}

调试显示:

img

运行结果:

img

有没有大手子能解答一下

是你输出的代码错了

img

48行,这时候i都是3了,越界了

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 3
#define COL 3

int menu()
{
    int input = 0;
    printf("************************************\n");
    printf("************1.开始游戏**************\n");
    printf("************0.退出游戏**************\n");
    printf("************************************\n");
    printf("请选择(1/0):");
    scanf("%d", &input);
    return input;
}

void initboard(char board[ROW][COL])
{
    for (int i = 0; i < ROW; i++) 
    {
        for (int j = 0; j < COL; j++) 
        {
            board[i][j] = ' ';
        }
    }
}

void printboard(char board[ROW][COL])
{
    int n = 0;
    for (n = 0; n < ROW; n++)
    {
        int i = 0;
        for (i = 0; i < COL; i++)
        {
            printf("+---");
        }
        printf("+\n");
        int j = 0;

        for (j = 0; j < COL; j++)
        {
            printf("| %c  ", board[i][j]);
        }
        printf("|\n");
    }
    int m = 0;
    for (m = 0; m < COL; m++)
    {
        printf("+---");
    }
    printf("+\n");
}

void playermove(char board[ROW][COL])
{
    while (1)
    {
        int x = 0;
        int y = 0;
        printf("请输入落子点位[1,3]:");
        scanf("%d %d", &x, &y);
        if (x - 1 < 0 || x - 1 >= ROW || y - 1 < 0 || y - 1 >= COL)
        {
            printf("坐标不在范围内,请重新输入\n");
            continue;
        }
        if (board[x - 1][y - 1] != ' ')
        {
            printf("该坐标已落子\n");
            continue;
        }
        board[x - 1][y - 1] = '*';
        break;
    }
}

void computermove(char board[ROW][COL])
{
    while (1)
    {
        int x = rand() % ROW;
        int y = rand() % COL;
        if (board[x][y] != ' ' && board[x][y] != '*')
        {
            board[x][y] = '#';
            break;
        }
    }
}

int draw(char board[ROW][COL])
{
    //和棋
    int x = 0;
    int y = 0;
    for (x = 0; x < ROW; x++)
    {
        for (y = 0; y < COL; y++)
        {
            if (board[x][y] == ' ')
                return 0;
        }
    }
    return 1;
}

int whowin(char board[ROW][COL])
{
    int x = 0;
    int y = 0;
    //赢棋
    for (x = 0; x < 3; x++)
    {
        if (board[x][0] == board[x][1] && board[x][0] == board[x][2] && board[x][0] != ' ')
            return board[x][0];
    }
    for (y = 0; y < 3; y++)
    {
        if (board[0][y] == board[1][y] && board[0][y] == board[2][y] && board[0][y] != ' ')
            return board[0][y];
    }
    if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] != ' ')
        return board[0][0];
    if (draw(board))
    {
        return 'd';
    }
    return ' ';
}

void game()
{
    char board[ROW][COL];
    char winner = ' ';
    initboard(board, ROW, COL);
    printboard(board);
    while (1)
    {
        system("cls");
        printboard(board);
        playermove(board);
        printboard(board);
        winner = whowin(board);
        if (winner != ' ')
        {
            break;
        }
        computermove(board);
        printboard(board);
        winner = whowin(board);
        if (winner != ' ')
        {
            break;
        }
        printboard(board);
        if (winner == '*')
        {
            printf("恭喜您赢得胜利!\n");
        }
        if (winner == '#')
        {
            printf("电脑乱下都能赢你???\n");
        }
        if (winner == 'd')
        {
            printf("平局,建议remake\n");
        }
    }
}

int main()
{
    srand((unsigned int)time(NULL));
    int input = 0;
    do
    {
        input = menu();
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("输入错误\n");
            break;
        }
    } while (input);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632