在一个数组中计算整数的总和

5
我不知道我是不是傻瓜,很可能是的,今天很累,但这并不像我想要的那样工作,而且,嗯,我不知道为什么。
应该能够输入11个数字,每行一个新数字,将它们添加到数组中,然后求和,但它却无法正常工作。即使我在增加i,它也没有停止退出循环。
有什么想法吗?
int main(void) {
 int array[10];
 int i;
 int sum = 0;
  for ( i = 0; i < 11; i++){
   scanf("%d", &array[i]);
  }
  for (i = 0; i < 11; i++) {
   sum += array[i];
  }
printf("%d", sum);

return 0;

}


1
你的数组只有10个元素的空间。 - Lee
如果你声明了一个包含十个整数的数组,有效的索引是从0到9;在你的代码中,你还使用了array[10],这是一个包含十个元素的数组的第11个元素。我完全不懂C语言,但我猜这可能会成为一个问题。这是我的两分钱。 - Toni Toni Chopper
它在我们中的许多人身上都“咬”过,不一定是当我们是初学者时。如果你在C语言和某些(少数)以1为起始索引的数组语言之间来回切换,这尤其令人困惑。 - Hot Licks
9个回答

6

在数组中有10个元素,编号为0-9。你溢出了缓冲区,所以一切都不确定了。这是未定义的行为。


1
啊,我知道这是某些愚蠢的事情,我以为10个元素的数组意味着从0到10,因此有11个元素..只是我太傻了。 - PnP

3

您不能将11个条目添加到一个只有10个元素的数组中。


但是我认为数组从0开始,0到10就是11个元素。 - PnP
@user1048116,虽然不是从0到10,但总共有10个元素,所以从0开始,范围是0到9。 - Hunter McMillen

3

我的猜测是缓冲区溢出,因为for循环读取了11个数字,第11个数字被存储在数组外面,可能会覆盖i。

尝试将for循环中的11更改为10。


2
您正在将11个数字存储到大小为10的数组中。因此,您正在存储超出边界的最后一个元素,这会引发未定义的行为。
在您的情况下,此未定义行为表现为无限循环的原因可能是,系统上的i存储在array之后的内存中,当您将数字写入array[10](正如我所说的超出边界),您正在覆盖i。因此,如果您输入的数字小于11,则会导致循环继续并再次要求输入。

1
如果一个数组是a[10],那么每个数组都从它的索引号0开始,所以这里将有10个元素;考虑到它们的位置将从0到9开始计数,共有10个元素。
你可以尝试这个:
main()         
{        
    int a[10], i, n, sum=0;    

    printf("enter no. of elements");
    scanf("%d",&n); 
    printf("enter the elements");   

    for(i=0;i<n;i++)    
        scanf("%d",&a[i]);

    for (i=0;i<n;i++)
        sum=sum+a[i];

    for(i=0;i<n;i++)
        printf("\n a[%d] = %d", i, a[i]);

    printf("\n sum = %d",sum);
    getch();

}

0

您的数组声明存在问题。您定义了一个大小为10的数组array[10],并让程序计算11个元素的总和,这会导致内存溢出。

要纠正程序,只需增加数组的大小,如array[11]。此外,如果您希望,可以检查递归方法来查找数组元素的总和


0

试试这个:

void main() {
 int array[10];
 int i;
 int sum = 0;

  for ( i = 0; i < 11; i++){
   scanf("%d", &array[i]);
  }
  for (i = 0; i < 11; i++) {
   sum = sum + array[i] ;
  }
printf("%d", sum);

return 0;
}

0
int main()
{
    //this the sum of integers in an array
    int array[] = { 22,2,2,1,5,4,5,7,9,54,4,5,4 },x,sum=0;
    int cout_elements = sizeof(array) / sizeof(int);
    for (x = 0; x < cout_elements; x++) {
        
        sum += array[x];

    }
    printf("%d",sum);
    return 0;
}

有用但在此特定问题中无法使用。数组的元素必须被键入(输入),而非预定义。 - ssd

-1
int main()
{
    int a[10];
    int i,j;
    int x=0;
    printf("Enter no of arrays:");
    scanf("%d",&j);
    printf("Enter nos:");
    for(i=0;i<j;i++)
    {
        scanf("%d",&a[i]);
    }
    for (i=0;i<j;i++)
    {
        x=x+a[i];
    }
    printf("Sum of Array=%d",x);
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接