Array reading max as one more than input

问题描述 投票:0回答:1

**警告:我对编码非常陌生。如果这段代码看起来一团糟,那是因为它确实是。 **

我让这段代码完美地工作......直到我的笔记本电脑随机重启并且我丢失了所有代码。我不得不重写它,现在,出于某种原因,当我输入一个数组时,它会添加一个额外的数字。

#include <stdio.h>

int main()
{
    int length = 0;
    int arr[length];
    int i;
    
    do {
        printf("please enter a positive nonzero integer: \n");
        scanf("%d", &length);
        if (length <= 0)
        printf("Length is invalid. Try again. \n");
    }
    while (length <= 0);
    
    printf("please enter %d numbers: \n", length);
    do {
        for (int i = 0; i <= length; ++i) {
          scanf("%d", &arr[i]);
        }
        } 
        while (length <= 0);
        
    int min = arr[0];
    int max = arr[0];
    double sum = arr[0];
    
    for (int i = 1; i <= length; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
        sum = sum + arr[i];
  }
  
  printf("Minimum is: %d\n Maximum is: %d\n Mean is: %f\n", min, max, sum/length);
  return 0;
}

例子:数组长度=5,数组=1 2 3 4 5 最小值 = 1,最大值 = 6,平均值 = 4 我被困住了,刚刚被打败了。我不能再看这个了。

arrays c max scanf mean
1个回答
0
投票

C 中的数组从

0
开始索引。长度为
5
的数组在
0
1
2
3
4
处具有索引。通过检查您的索引是否小于 或等于 长度,您的索引越界了。这会导致未定义的行为。

例如,您的

for
循环应如下所示,将
<=
替换为
<
.

for (int i = 1; i < length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }

    if (arr[i] < min) {
        min = arr[i];
    }

    sum = sum + arr[i];
}
© www.soinside.com 2019 - 2024. All rights reserved.