在c中打印垃圾值而不是数组中的最大值

时间:2014-05-09 20:39:36

标签: c arrays

我是编程新手。

我已经尝试过这段代码来找出数组中的最大值。我还在纸上绘制了这段代码的逻辑。它出来了。

我想知道为什么这段代码打印垃圾值而不是最大值。 这是代码:

void main(){

    int size, i, max=0;

    printf("Enter the size of the array:\n");
    scanf("%d", &size);
    int a[size];
    printf("Enter the elements:\n");
    for(i=0; i<size; i++){
    scanf("%d", &a[i]);
    }

    for(i=0; i<size; i++){

            if(a[i]<a[i+1]){
                max=a[i+1];
            }
    }
    printf("\nMax value is %d", max);
}

4 个答案:

答案 0 :(得分:2)

你需要在搜索数组之前初始化某个地方(该帖子的当前副本确实做了......但第一个没有)。但是,如果输入负值,则使用INT_MIN可能是有意义的。

max = INT_MIN;

然后你需要将当前最大值与数组元素(而不是数组元素)进行比较。

答案 1 :(得分:2)

此时,在您的代码中,您将离开阵列。您还没有将数组元素与当前max进行比较,而是与数组中的下一个元素进行比较。这将用于排序数组,但不能找到最大值。

for(i=1; i<=size; i++){ /* i<=size */ you go one beyond
    if(a[i]<a[i+1]){ /* when i==size, you're 2 outside of your array */
        max=a[i+1];
    }
}

你可以拥有i<(size-2),但它不是很漂亮。

您还可以将max设置为数组的第一个元素,然后从第二个元素循环。

max = a[0];
for(i=1 ; i<size ; i++){ /* loop to the end of the array */
    if(a[i] > max){ /* compare current space to max */
        max = a[i];
    }
}

答案 2 :(得分:2)

您可以尝试此代码..

int main(){

int size, i, max=0;

printf("Enter the size of the array:\n");
scanf("%d", &size);
int a[size];
printf("Enter the elements:\n");
for(i=0; i<size; i++){
scanf("%d",&a[i]);
}
  // Search Max Value
  max = a[0];
  for (i = 0; i < size; i++)
  {
    if (a[i] > max)
    {
       max  = a[i];
    }
  }
printf("\nMax value is %d", max);
return 0;
}

答案 3 :(得分:0)

  1. main始终返回类型int。有效的原型:
    1. int main()
    2. int main(int argc, char* argv[])
  2. 从0开始,作为max的初始值,而不是INT_MIN,意味着您有一个值为0的隐式元素。
  3. 始终测试scanf的返回值,可能不会成功。
  4. 您的第二个循环尝试阅读a[size]a[size+1],而您的数组只会转到索引size-1
    1. 将终止条件更正为<
    2. 更正比较以将a[i]max进行比较。