所以这个编译没有问题。我遇到的问题是当它打印到控制台时,右下角有一个额外的列和一个奇怪的ascii字符。如果我试图减小阵列的大小,我不能用9个元素初始化它 - 我必须有9个元素才能使它成为一个tic tac toe board。我认为这是一个错误,但如果是这样,我无法弄清楚如何解决它。我已经阅读了很多类似问题的“tic tac toe”,但它们似乎没有同样的问题。
#include <iostream>
using namespace std;
int main ()
{
int countrow, countcol, play=1, subscript1, subscript2;
int ARRAY_ROWS = 3, ARRAY_COLS =3;
char board [3][3] = {{42, 42,42}, {42, 42,42}, {42, 42,42}};
char input;
while(play>0)
{
for(countrow = 0; countrow<ARRAY_ROWS; countrow++)
{
for(countcol=0; countcol<ARRAY_COLS; countcol++)
{
cout<<board [countrow][countcol];
}
cout<<board[countrow][countcol];
cout<<endl;
}
cout<<"Player 1, enter your mark using a row column coordinate system.\n";
cin>>subscript1>> subscript2;
subscript1+=1;
board[subscript1][subscript2] = 88;
cout<<"Player 2, enter your mark using a row column coordinate system.\n";
cin>>subscript1>> subscript2;
board[subscript1][subscript2] = 79;
}
system("pause");
return 0;
}
答案 0 :(得分:1)
问题在于:
for(countrow = 0; countrow<ARRAY_ROWS; countrow++)
{
for(countcol=0; countcol<ARRAY_COLS; countcol++)
{
cout<<board [countrow][countcol];
}
cout<<board[countrow][countcol];
//^^^^^This one is redundant and you are accessing invalid memory block
//^^^^^^ countcol is out of bound
cout<<endl;
}
答案 1 :(得分:1)
您有以下行的冗余副本:
cout<<board[countrow][countcol];
这将导致每行带有垃圾数据的额外列(countcol = 3,超出数组范围)。
答案 2 :(得分:1)
在你的内循环之后,你有另一个
cout<<board[countrow][countcol];
你不需要......删除它,额外的列就不见了。