数组总是返回愚蠢的东西

时间:2014-05-19 16:49:24

标签: c++ arrays while-loop

我不知道为什么它不起作用......

我有一个数组

int point[6][6][1]

我有一个while循环:

int i = 0;
while (point[i + 1][0][0] > 0) {
   i++;
}

return i;

如果我宣布了3分

point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;

TotalNumberOfPoints(point)

while循环以i为4结束。

如果我宣布了4分

point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
point[4][0][0] = 4;

它返回4.

如果我宣布了5分

point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
point[4][0][0] = 4;
point[5][0][0] = 5;

它返回7.

这是为什么?我该如何解决?

4 个答案:

答案 0 :(得分:3)

问题是你的循环可能会在最后point(即设置了第一个索引5的循环i时产生未定义的行为,因为循环没有检查i < 5 while(i < 5 && point[i + 1][0][0] > 0] { i++; }

以下是解决问题的方法:

i

您将6与5进行比较而不是point[i+1]的原因是,您要继续检查i,因此{{1}}需要小于5,而不是6

答案 1 :(得分:0)

你不能这样做

while(point[i + 1][0][0] > 0] {
   i++;
}

i = 6时会发生什么?您将获得未定义的行为。它不知道数组刚开始索引越界,所以索引7&#34;的&#34;元素可能会大于0或更小,或者不管发生什么。

此外,您的数组未初始化,因此每个元素的值可能是任意的。

答案 2 :(得分:0)

你应该在声明它时初始化数组

int point[6][6][1]={0};

否则它将包含可能不是zero的垃圾值,使您的循环条件为假。

你的循环应该是

while(i<5 && point[i+1][0][0] > 0) {
   i++;
 }

答案 3 :(得分:0)

尝试对数组进行零初始化。

int point[6][6][1] = {};

顺便说一句,请注意

  • 为了正确,您需要确保数组末尾有一个0,以其他方式停止循环(例如使用计数器)。

  • 尺寸为1的尺寸并不实用。

  • 您可以使用std::vector创建动态大小的数组。