在C++中打印 2D 字符数组

Printing a 2D char array in C++

本文关键字:字符 数组 2D 打印 C++      更新时间:2023-10-16

所以我的代码有问题,我无法确定。简而言之,我想以网格格式打印出 c++ 中的 2D 字符数组的内容。我的代码如下(请记住,我不想更改代码的结构,只需找到为什么我没有得到想要的结果(:

#include <iostream>
#include <string>
using namespace std;
void drawBoard(char board[3][4])
{
    int j = 0;
    for (int i = 1; i < 12; i++)
    {
        if ((i % 4) == 1 || (i % 4) == 2)
        {
            cout << " " << board[i][j] << " |";
        }
        else if ((i % 4 == 3))
        {
            cout <<  " " + board[i][j] << endl;
        }
        else
        {
            cout << "---+---+---" << endl;
            j += 1;
        }
    }
}
int main()
{
    char board[3][4] = { {' ', ' ', ' ', ''}, {' ', ' ', ' ', ''}, {' ', 
    ' ', ' ', ''} };
    drawBoard(board);
    cin.get();
}

我期望这给我的是一个基本的井字游戏网格,其中有 X 和 O 的空白区域。相反,我得到的是一个网格,如预期的那样,随机字符放置在一些正方形中,无论我进行多少调整都会给出相同或相似的结果,但我不明白为什么。任何帮助将不胜感激(最好也不要包括基本 c++ 以外的任何内容,如函数、循环等,因为我还没有学过这些,即使我们知道它们,我们也不能在作业中使用它们(。

检查数组范围:

char board[3][4]

然后你有:

board[i][j]  ->  board[1,2,3,5,6,7,9,10,11][j] 

无论i%4是什么,放在board里的东西i不是i%3.

使用以下任一结构:

for i
   for j
      board[i][j]

for i
   ((char*)board)[i]

我已经编辑了您的代码:

#include <iostream>
#include <string>
using namespace std;
void drawBoard(char board[3][4])
{
    for (int i = 0; i < 12; i++)
    {
        if(i%4!=3)
        {
            cout<<" "<<board[i/4][i%4]; // board[0 to 2][0 to 2, 3 skept]
            if(i%4<2)
                cout<<" |";
        }
        else
        {
            if(i/4<2)
                cout<<endl<< "---+---+---";
            cout<<endl; // new line
        }
    }
}
int main()
{
    char board[3][4] = { {'x', 'o', 'x', ''}, {'o', 'x', 'x', ''}, {'o', 
    'o', 'x', ''} };
    drawBoard(board);
    cin.get();
}

结果:

 x | o | x
---+---+---
 o | x | x
---+---+---
 o | o | x