C++ 数组总是返回愚蠢的东西
我不知道为什么它不起作用 我有一个数组C++ 数组总是返回愚蠢的东西,c++,arrays,while-loop,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) point[1][0][0] = 1; point[2][0
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)
point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
point[4][0][0] = 4;
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;
while循环以i
为4结束
如果我申报了4分
point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
TotalNumberOfPoints(point)
point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
point[4][0][0] = 4;
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;
它返回4
如果我申报了5分
point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
TotalNumberOfPoints(point)
point[1][0][0] = 1;
point[2][0][0] = 2;
point[3][0][0] = 3;
point[4][0][0] = 4;
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
为什么会这样?我怎样才能修复它呢?你不能这么做
while(point[i + 1][0][0] > 0] {
i++;
}
当i=6
时会发生什么?您将获得未定义的行为。它不知道数组刚刚开始索引超出范围,因此“索引7处的元素”很可能大于0或小于0,或者发生任何情况
此外,您的数组未初始化,因此每个元素的值可能是任意的。您不能这样做
while(point[i + 1][0][0] > 0] {
i++;
}
当i=6
时会发生什么?您将获得未定义的行为。它不知道数组刚刚开始索引超出范围,因此“索引7处的元素”很可能大于0或小于0,或者发生任何情况
此外,您的数组未初始化,因此每个元素的值可能是任意的。您不能这样做
while(point[i + 1][0][0] > 0] {
i++;
}
当i=6
时会发生什么?您将获得未定义的行为。它不知道数组刚刚开始索引超出范围,因此“索引7处的元素”很可能大于0或小于0,或者发生任何情况
此外,您的数组未初始化,因此每个元素的值可能是任意的。您不能这样做
while(point[i + 1][0][0] > 0] {
i++;
}
当i=6
时会发生什么?您将获得未定义的行为。它不知道数组刚刚开始索引超出范围,因此“索引7处的元素”很可能大于0或小于0,或者发生任何情况
此外,您的数组未初始化,因此每个元素的值可能是任意的。您应该在声明数组时初始化数组
int point[6][6][1]={0};
否则,它将包含可能不是零的垃圾值,从而使循环条件为false
你的循环应该是
while(i<5 && point[i+1][0][0] > 0) {
i++;
}
while(i 0){
i++;
}
您应该在声明数组时初始化它
int point[6][6][1]={0};
否则,它将包含可能不是零的垃圾值,从而使循环条件为false
你的循环应该是
while(i<5 && point[i+1][0][0] > 0) {
i++;
}
while(i 0){
i++;
}
您应该在声明数组时初始化它
int point[6][6][1]={0};
否则,它将包含可能不是零的垃圾值,从而使循环条件为false
你的循环应该是
while(i<5 && point[i+1][0][0] > 0) {
i++;
}
while(i 0){
i++;
}
您应该在声明数组时初始化它
int point[6][6][1]={0};
否则,它将包含可能不是零的垃圾值,从而使循环条件为false
你的循环应该是
while(i<5 && point[i+1][0][0] > 0) {
i++;
}
while(i 0){
i++;
}
尝试对数组进行零初始化
int point[6][6][1] = {};
顺便说一下,请注意
- 为了保证正确性,您需要确保数组末尾有一个0,或者以其他方式停止循环(例如使用计数器)
- 大小为1的维度实际上并不有用
- 您可以使用
创建动态大小的数组std::vector
int point[6][6][1] = {};
顺便说一下,请注意
- 为了保证正确性,您需要确保数组末尾有一个0,或者以其他方式停止循环(例如使用计数器)
- 大小为1的维度实际上并不有用
- 您可以使用
创建动态大小的数组std::vector
int point[6][6][1] = {};
顺便说一下,请注意
- 为了保证正确性,您需要确保数组末尾有一个0,或者以其他方式停止循环(例如使用计数器)
- 大小为1的维度实际上并不有用
- 您可以使用
创建动态大小的数组std::vector
int point[6][6][1] = {};
顺便说一下,请注意
- 为了保证正确性,您需要确保数组末尾有一个0,或者以其他方式停止循环(例如使用计数器)
- 大小为1的维度实际上并不有用
- 您可以使用
创建动态大小的数组std::vector
点时(即第一个索引为5
的点),循环可能会产生未定义的行为,因为循环没有检查i
中的i<5
以下是您可以修复它的方法:
while(i < 5 && point[i + 1][0][0] > 0] {
i++;
}
while(i<5&&point[i+1][0][0]>0]{
i++;
}
将i
与5进行比较,而不是与6
进行比较的原因是,您继续检查点[i+1]
,因此i
需要小于5,而不是6。问题是,当最后一个点
时,循环可能会产生未定义的行为(即,设置了第一个索引为5
的索引,因为循环没有检查i
中的i<5
以下是您可以修复它的方法:
while(i < 5 && point[i + 1][0][0] > 0] {
i++;
}
while(i<5&&point[i+1][0][0]>0]{
i++;
}
将i
与5进行比较,而不是与6
进行比较的原因是,您继续检查点[i+1]
,因此i
需要小于5,而不是6。问题是,当最后一个点
时,循环可能会产生未定义的行为(即,设置了第一个索引为5
的索引,因为循环没有检查i
中的i<5
以下是您可以修复它的方法:
while(i < 5 && point[i + 1][0][0] > 0] {
i++;
}
while(i<5&&point[i+1][0][0]>0]{
i++;
}
将i
与5进行比较,而不是与6
进行比较的原因是,您继续检查点[i+1]
,因此i
需要小于5,而不是6。问题是,当最后一个点(即第一个索引为的点)时,循环可能会产生未定义的行为