输出的数组值与存储的值不同

Outputted array values different from the values stored

本文关键字:存储 输出 数组      更新时间:2023-10-16

我制作了一个数组,并在initializeBoard函数中设置了从1到9的值,但由于某种原因,当我打印这些值时,它们显示为0到8。为什么会发生这种情况?难道它不应该输出1到9吗?因为这些是我在initializeBoard中放入数组的数字?

int main()
{
    initializeBoard();
    ticTacToeBoard();
}
void initializeBoard()
{
    for (int i = 1; i < 9; i++)
        ticTacBoard[i] = i;
    cout << endl;
}
void ticTacToeBoard ()
{
    for (int y = 0; y < 3; y++)
    {
        for (int x = 0; x < 3; x++)
            cout << ticTacBoard[3 * y + x] << " ";
        cout << endl;
    }
}

您有一个差一的错误。数组在c++中使用从零开始的索引。您的代码没有给数组的0 元素赋值。

试试这个:

for (int i = 0; i < 9; i++)
{
    ticTacBoard[i] = i + 1;
}

循环:

for (int i = 1; i < 9; i++)
{
    ticTacBoard[i] = i;
}

将只执行1-8,因为当i++将其增加到9时它将停止,因此您没有初始化所有9个元素。

你应该像这样做同样的循环:

for (int i = 0; i < 9; i++)
{
    ticTacBoard[i] = (i + 1);
}

问题在于:

ticTacBoard[i] = i;
应:

ticTacBoard[i-1] = i;

两个建议:

  • 在用[]访问ticTacBoard之前不应该初始化它吗?确保为所有插槽提供足够的内存!(我猜你在玩井字游戏,所以你需要3x3 = 9个槽)
  • c++中的索引从0开始。你想输入for (i=0; i<9; i++)

希望这对你有帮助!

您的i0开始,因此您的第一个值将是0。由于不等式i < 9i = 9i实际上从来不是9时被打破(循环在你的代码实际运行之前退出)。

尝试使用<=而不是<来解释i = 9:

for (int i = 1; i <= 9; i++)
{
    ticTacBoard[i - 1] = i;
}

除此之外,数组从c++(以及几乎所有其他语言)的0开始索引,因此第一个元素是array[0],第二个是array[1],等等。

您必须从数组索引中减去1