Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组总是返回愚蠢的东西_C++_Arrays_While Loop - Fatal编程技术网

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。

问题是,当最后一个
点(即第一个索引为
的点)时,循环可能会产生未定义的行为