简单的数组操作错误?

时间:2013-10-20 02:19:40

标签: c++

我正在教自己C ++并且在尝试使用数组时遇到了问题:

我正在尝试制作一个 tic-tac-toe 游戏,用户将输入两个整数来宣布他想要移动的位置,然后打印出适合他们的棋盘。

除此之外,当我尝试修改我的电路板一次时,它通常会改变两个值!

示例)如果我输入的前四个数字是{0,1,1,0}我希望绘制两个字母 - 一个“x”和一个“o”。

但是画了多个“o”!

感谢您的帮助!

#include <string>
#include <iostream>
using namespace std;

string board[2][2];
int xpos, ypos;
string turn;

int main()
{
for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        board[i][j]="-";
    }

}
for(int i=0;i<9;i++)
{
    if(i%2==0)
        turn = "x";
    else
        turn = "o";

    cout<< "Where are you moving?\n";
    cin>> xpos >> ypos;

    board[xpos][ypos] = turn;

    cout<<"The board is:\n";
    cout<< board[0][0]+board[0][1]+board[0][2]+ "\n";
    cout<< board[1][0]+board[1][1]+board[1][2]+ "\n";
    cout<< board[2][0]+board[2][1]+board[2][2]+ "\n";

}
return 0;
}

2 个答案:

答案 0 :(得分:1)

开始更改

string board[2][2];

string board[3][3];

因为你的循环从0到2 - 即3项

答案 1 :(得分:0)

将数组从2x2更改为3x3后,我测试了代码,它似乎正在运行。

但是,您应该在用户输入后检查xposypos的值:正如代码现在一样,

board[xpos][ypos] = turn;

可能超出界限,并且可能导致程序崩溃(如果用户在任何坐标上输入大于2的任何内容)。

最后,这是个人偏好的问题,你的代码现在使用用户输入的坐标,从0到2.通常,人们会说它们在1到3的范围内(所以1,1将是左上角大多数方形,而不是中间方形)。更改此项是将先前引用的行更改为

board[xpos-1][ypos-1] = turn;

(当然,检查值在1和3之间)。

编辑:此外,所提出的坐标是垂直 - 水平的(意味着给定的第一个值代表垂直坐标,第二个值代表水平坐标)。因此,在标准的笛卡尔图上,您的值被表示为(y,x),与人们(并且,我只是猜测,你)的习惯相反。