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

时间:2011-11-07 21:28:53

标签: c++ arrays

我创建了一个数组,并在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;
    }
}

5 个答案:

答案 0 :(得分:8)

你有off-by-one error。数组在C ++中使用zero-based indexing。您的代码不会为数组的零 th 元素赋值。

请改为尝试:

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

答案 1 :(得分:2)

循环:

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);
}

答案 2 :(得分:1)

问题在于:

ticTacBoard[i] = i;

应该是:

ticTacBoard[i-1] = i;

答案 3 :(得分:1)

两个建议:

  • 在使用ticTacBoard访问[]之前,您是否应初始化for (i=0; i<9; i++)?确保为所有插槽提供足够的内存! (我猜你在做tic tac toe,所以你需要3x3 = 9个插槽)
  • C ++中的索引从0开始。您想要{{1}}

希望这有帮助!

答案 4 :(得分:-1)

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

尝试使用<=代替<代替i = 9

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

除此之外,数组从C ++中的0(实际上是所有其他语言)开始编制索引,因此第一个元素是array[0],第二个元素是array[1]等。

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