You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历多维数组?以及如何正确实现井字棋棋盘打印?

解决井字棋棋盘打印的问题

咱们先看看你代码里的几个关键问题,很快就能搞定:

问题1:数组遍历逻辑错误

你现在的循环把行和列搞反了,而且固定只打印第一行的元素:

  • 外层循环遍历的是COLUMNS(列数),但实际上应该遍历ROWS(行数)
  • 内层循环里你一直用board[0][j],这意味着不管循环到第几轮,你都只在打印第一行的内容,自然会得到重复且混乱的输出

正确的二维数组遍历应该是:外层循环控制行,内层循环控制列,这样才能依次访问每一行的每个元素,也就是board[i][j],其中i是行索引,j是列索引。

问题2:缺少棋盘的格式分隔

井字棋棋盘需要用竖线分隔每一列,用横杠分隔每一行,不然打印出来的只是一堆零散的字符,看不出棋盘的结构。

修正后的完整代码

#include <iostream>
int main() {
    const int ROWS = 3;
    const int COLUMNS = 3;
    char board[ROWS][COLUMNS] = { {'X', 'O', 'X'}, {' ', 'O', 'O'}, {'X', 'X', 'O'} };
    
    // 遍历每一行
    for (int i = 0; i < ROWS; i++) {
        // 打印当前行的所有元素,带列分隔符
        for (int j = 0; j < COLUMNS; j++) {
            std::cout << board[i][j];
            // 不是最后一列的话,打印竖线分隔
            if (j != COLUMNS - 1) {
                std::cout << " | ";
            }
        }
        std::cout << "\n";
        
        // 不是最后一行的话,打印行分隔线
        if (i != ROWS - 1) {
            std::cout << "---------\n";
        }
    }
    return 0;
}

代码解释

  1. 正确遍历数组:外层循环i从0到2(对应3行),内层循环j从0到2(对应3列),每次输出board[i][j],也就是当前行的当前列元素。
  2. 列分隔符:每打印一个元素后,如果不是当前行的最后一列,就输出|来分隔列。
  3. 行分隔线:每打印完一行后,如果不是最后一行,就输出---------来分隔行,让棋盘结构更清晰。

运行这段代码后,你会得到标准的井字棋棋盘输出:

X | O | X
---------
  | O | O
---------
X | X | O

内容的提问来源于stack exchange,提问作者Njgardner90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:42:30