2011-11-28 106 views
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

如果声明一个由10个整数组成的数组,则有效索引从0到9;在你的代码中,你也可以使用array [10],它是十个数组中的第11个元素。我根本不知道C,但我想这可能是一个问题。我的2美分 –

+0

它是“咬”我们许多人在某个时候或另一个时候,并不总是当我们是初学者。如果你在基于C的语言和少数1个原始数组语言之间来回移动,那么特别容易混淆。 –

回答

4

您在阵列中有10个元素,编号为0 - 9。您正在溢出缓冲区,所以所有投注都关闭。这是未定义的行为。

+1

啊jees,我知道这是愚蠢的东西,我认为10个元素数组意味着0到10,因此有11个元素。只是我是愚蠢的 – PnP

3

不能添加11项十个元素的数组。

+0

但是,数组从0开始,我认为,从0到10,是11个元素。 – PnP

+0

哦,jees,我知道这是真的很愚蠢,干杯 – PnP

+0

@ user1048116它不是0-10虽然,总共有10个元素,所以从0开始,即0到9 –

3

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

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

2

您正在将十一个数字存储到一个大小为10的数组中。因此,您将最后一个元素存储在边界之外,这会调用未定义的行为。

,这个不确定的行为表现为你的情况的无限循环可能是i存储array后在内存系统上,当你写一个数字,array[10](这是出界,正如我所说的原因),你正在覆盖i。因此,如果您输入的数字小于11,则会导致循环继续并再次请求输入。

1

如果一个数组是[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]的数组,并说程序计算导致内存溢出的元素之和。

要更正程序,只需将数组的大小增加为array[11]即可。另外如果你愿意,你可以检查recursive approach to find sum of array elements

-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; 
} 
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; 
}