1

我目前正在自学 C++,但在尝试使用数组时遇到了问题:

我正在尝试制作井字游戏,用户将输入两个整数来宣布他想移动的位置,然后为他们打印出棋盘。

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

示例)如果我输入的前四个数字是{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;
}
4

2 回答 2

1

开始改变

string board[2][2];

string board[3][3];

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

于 2013-10-20T02:23:24.833 回答
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),这与人们(而且,我只是猜测,您)习惯的相反。

于 2013-10-20T02:57:11.970 回答