[英]Printing a 2D char array in C++
所以我的代码有问题,我无法查明。 简而言之,我想以网格格式用c ++打印2D char数组的内容。 我的代码如下(请记住,我不想更改代码的结构,只是找到为什么我没有得到期望的结果):
#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] = { {' ', ' ', ' ', '\0'}, {' ', ' ', ' ', '\0'}, {' ',
' ', ' ', '\0'} };
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', '\0'}, {'o', 'x', 'x', '\0'}, {'o',
'o', 'x', '\0'} };
drawBoard(board);
cin.get();
}
结果:
x | o | x
---+---+---
o | x | x
---+---+---
o | o | x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.