简单的数组操作错误

Simple array manipulation error?

本文关键字:错误 操作 数组 简单      更新时间:2023-10-16

>我目前正在自学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;
}

对于开始更改

string board[2][2];

string board[3][3];

由于您的循环从 0 到 2 - 即 3 个项目

将数组从 2x2 更改为 3x3 后,我测试了代码,它似乎可以工作。

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

board[xpos][ypos] = turn;
可能

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

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

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

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

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

相关文章: