为什么我的代码给出了毫无意义的荒谬输出



我是C的新手,正在编写一段从整数数组中打印最大值和最小值的代码。例如:输入为1 2 3 4 5,则输出将为min=1+2+3+4=10,max=2+3+4+5=14。我的代码给出的输出是0 0,而不是10 14。我就是不明白为什么。


#include <stdio.h>
int main()
{
int len;
int max=0,min=0;
scanf("%d", &len);
int arr[len];
for(int i=0;i<len;i++)
{
scanf("%d", &arr[i]);
}
int cpy;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
cpy = arr[i+1];
arr[i+1]=arr[i];
arr[i]=cpy;
}
}
}

for(int i=0;i<len-1;i++)
{
min = min + arr[i];
max = max + arr[i+1];
}
printf("%d %d", min, max);
} 

在本部分中:

if(arr[i]>arr[j])
{
cpy = arr[i+1];
arr[i+1]=arr[i];
arr[i]=cpy;
}

比较i和j索引,但交换i和i+1索引。在您的情况下:

  • 5 1 2 3 4 5给出14 10
  • 5 5 4 3 2 1给出13 10

您还应该循环i<len-1。即使它的工作原理是j循环不会在i=len-1时运行,也最好避免不必要的循环,因为这可能会导致未定义的行为。

你可能对arr的声明有问题(我有错误,但这可能取决于编译器(。尝试分配:

#include <stdlib.h>
…..
int *arr = calloc(len, sizeof (*arr));

最新更新