条件递增不正确

Conditional Incrementing Incorrectly

我的函数

int numSteepSegments(const int heights[], int arrSize) {

    int mile = 0, steep_count = 0;

    while (mile <= arrSize) {
        int height = heights[mile];
        int height_next = heights[mile + 1];
        if ((height + 1000) < height_next) {
            ++steep_count;
        } else if ((height - 1000) > height_next) {
            ++steep_count;
        }
        cout << heights[mile] << endl;
        cout << steep_count << endl;

        ++mile;
    }
    return steep_count;
}

吐出的量 steep_count 是预期的两倍。

使用数组: 1200, 1650, 3450, 2800, 2900, 1650, 1140, 1650, 1200,以及 arrSize = 9,我错过了什么?

cout 是:

1200
0
1650
1
3450
1
2800
1
2900
2
1650
2
1140
2
1650
2
1200
3
1746942513
4

最后一个值是多少?它显然不在数组中,而且我看不到它属于我正在处理的数字附近的任何地方。我在我的条件语句中没有看到什么导致 steep_count 的错误增量?

C/C++ 数组是 zero-based。具有 arrSize 个元素的数组的索引范围从 0arrSize-1.

您的循环索引 mile 的范围从 0arrSize(含),因此 heights[mile] 正在离开数组的末尾。此外,您索引的 heights[mile+1] 会超出数组限制,即使您的索引被限制为 arrSize-1.

试试:

  • 将循环更改为从 0arrSize-2(含),或
  • 将循环更改为从 1arrSize-1 的范围,并使用 mile-1 作为第一个索引。