在C ++中打印2D char数组

时间:2017-11-11 01:39:30

标签: c++ arrays char

所以我的代码有问题,我无法查明。简单地说,我想以网格格式打印出c ++中2D char数组的内容。我的代码是以下(请记住,我不想更改我的代码的结构只是找到为什么我没有得到所需的结果):

setDT(start)[, if(uniqueN(sub_grp) > 1) .SD, grp]

#   grp obs sub_grp
#1:   A   1      A1
#2:   A   2      A1
#3:   A   3      A2
#4:   A   4      A2
#5:   C   8      C1
#6:   C   9      C2
#7:   C  10      C3

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

1 个答案:

答案 0 :(得分:1)

检查阵列范围:

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', '\0'}, {'o', 'x', 'x', '\0'}, {'o', 
    'o', 'x', '\0'} };
    drawBoard(board);

    cin.get();
}

结果:

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