0

所以这编译没有问题。我遇到的问题是,当它打印到控制台时,右下角有一个额外的列和一个奇怪的 ascii 字符。如果我试图减小数组的大小,我不能再用 9 个元素初始化它——我必须有 9 个元素才能使它成为一个井字游戏板。我认为这是一个错误,但如果是这样,我不知道如何解决它。我已经阅读了很多“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;
}
4

3 回答 3

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;
}
于 2013-03-25T02:26:20.710 回答
1

您有以下行的冗余副本:

cout<<board[countrow][countcol];

这将导致每行带有垃圾数据的额外列(countcol = 3,在数组边界之外)。

于 2013-03-25T02:26:30.180 回答
1

在你的内循环之后,你有另一个

        cout<<board[countrow][countcol];

您不需要...删除它,多余的列就消失了。

于 2013-03-25T02:27:27.930 回答