我不知道为什么它不起作用......
我有一个数组
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.
这是为什么?我该如何解决?
答案 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
创建动态大小的数组。