2011-11-28 142 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; 
}