如何遍历多维数组?以及如何正确实现井字棋棋盘打印?
解决井字棋棋盘打印的问题
咱们先看看你代码里的几个关键问题,很快就能搞定:
问题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; }
代码解释
- 正确遍历数组:外层循环
i从0到2(对应3行),内层循环j从0到2(对应3列),每次输出board[i][j],也就是当前行的当前列元素。 - 列分隔符:每打印一个元素后,如果不是当前行的最后一列,就输出
|来分隔列。 - 行分隔线:每打印完一行后,如果不是最后一行,就输出
---------来分隔行,让棋盘结构更清晰。
运行这段代码后,你会得到标准的井字棋棋盘输出:
X | O | X --------- | O | O --------- X | X | O
内容的提问来源于stack exchange,提问作者Njgardner90
相关产品推荐
相关产品推荐

