我创建了一个数组,并在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;
}
}
答案 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个插槽)希望这有帮助!
答案 4 :(得分:-1)
i
从0
开始,因此您的第一个值为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
。