【问题标题】:array always returns stupid things数组总是返回愚蠢的东西
【发布时间】:2014-07-07 17:30:43
【问题描述】:

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

我有一个数组

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。

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

【问题讨论】:

  • initialised数组正确吗?
  • 请考虑给这个问题一个更好的标题。
  • 这个标题很无用。请提供一个足够描述性的标题,以便在搜索结果中找到它的人了解问题的内容。
  • 我不得不回滚版主的编辑,因为它改变了问题的要点。
  • @minitech:假设它可能是一个错字确实是合理的。但是从那里到“纠正”代码是一个很长的跳跃。

标签: c++ arrays while-loop


【解决方案1】:

问题在于,当最后一个point(即第一个索引为5 的那个)设置时,您的循环可能会产生未定义的行为,因为循环没有检查i 中的i < 5

以下是您可以解决的方法:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    你的循环应该是

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

    【讨论】:

    • @user3520616,如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    【解决方案3】:

    你不能这样做

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

    i = 6 时会发生什么?你会得到未定义的行为。它不知道数组刚开始索引越界,因此“索引 7 处的元素”很可能大于 0,或者小于 0,或者发生任何情况。

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

    【讨论】:

      【解决方案4】:

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

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

      顺便提一下

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

        李>
      • 大小为 1 的维度并没有真正的用处。

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

      【讨论】:

        猜你喜欢
        • 2023-02-26
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多