2011-11-28 42 views
5

Tôi không biết liệu mình chỉ là một kẻ ngốc, rất có thể tôi là một ngày dài, nhưng điều này không hiệu quả như tôi muốn, và , tôi không hiểu tại sao.Tính tổng các số nguyên trong một mảng

Nó sẽ có thể có 11 số được nhập, một số mới trên mỗi dòng, thêm chúng vào mảng, sau đó tổng số chúng, nhưng nó chỉ không hoạt động. Nó không dừng lại để thoát khỏi vòng lặp, mặc dù tôi đang tăng i.

Bất kỳ ý tưởng nào?

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

mảng của bạn chỉ có không gian cho 10 yếu tố. – Lee

+0

Nếu bạn khai báo một mảng mười số nguyên, các chỉ mục hợp lệ là từ 0 đến 9; trong mã của bạn, bạn cũng sử dụng mảng [10] là phần tử thứ 11 của một mảng mười. Tôi không biết C nhưng tôi đoán nó có thể là một vấn đề. 2 xu của tôi –

+0

Nó bị "cắn" nhiều người trong chúng ta cùng một lúc, không phải lúc nào chúng tôi cũng là người mới bắt đầu xếp hạng. Đặc biệt khó hiểu nếu bạn di chuyển qua lại giữa ngôn ngữ dựa trên C và một trong các ngôn ngữ (ít nhất là 1-mảng-mảng). –

Trả lời

4

Bạn có 10 phần tử trong mảng, đánh số 0 - 9. Bạn đang tràn bộ đệm, vì vậy tất cả các phiên cược sẽ bị tắt. Đây là hành vi không xác định.

+1

Ah jees, tôi biết nó là somthing stupid , Tôi nghĩ rằng 10 mảng phần tử có nghĩa là 0 đến 10, do đó 11 yếu tố .. Chỉ cần tôi là ngu ngốc – PnP

3

Bạn không thể thêm mười một mục đến một mảng mười phần tử.

+0

Nhưng mảng bắt đầu từ 0 tôi nghĩ và từ 0 đến 10, là 11 phần tử. – PnP

+0

Oh jees, tôi biết đó là một cái gì đó thực sự ngu ngốc, Cheers – PnP

+0

@ user1048116 nó không phải là 0-10 mặc dù, có 10 yếu tố tổng số, vì vậy bắt đầu từ 0 đó là 0 đến 9 –

3

Đoán của tôi là bộ đệm chạy quá vì vòng lặp for đọc trong 11 số và số thứ 11 được lưu bên ngoài mảng, có thể ghi đè i.

Thử thay đổi 11 đến 10 trong vòng lặp for.

2

Bạn đang lưu trữ mười một số vào một mảng có kích thước 10. Vì vậy, bạn đang lưu trữ phần tử cuối cùng ngoài giới hạn, điều này sẽ gọi hành vi không xác định.

Lý do mà hành vi undefined này biểu hiện chính nó như là một vòng lặp vô hạn trong trường hợp của bạn có lẽ rằng i được lưu trữ sau khi array trong bộ nhớ trên hệ thống của bạn và khi bạn viết một số thành array[10] (đó là ngoài giới hạn, như tôi đã nói), bạn đang ghi đè i. Vì vậy, nếu bạn nhập một số nhỏ hơn 11, điều này sẽ làm cho vòng lặp tiếp tục và yêu cầu nhập lại một lần nữa.

1

Nếu mảng là [10], thì mỗi mảng bắt đầu từ số chỉ mục 0, vì vậy tại đây nó sẽ có 10 phần tử; cho rằng vị trí của họ sẽ bắt đầu từ 0 đến 9, đếm cho 10 yếu tố.

Bạn có thể thử này:

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

Bạn có vấn đề với khai báo mảng của bạn. Bạn đang xác định một mảng có kích thước 10 array[10] và nói chương trình tính tổng các chi tiết các yếu tố dẫn đến tràn bộ nhớ.

Để sửa chương trình, chỉ cần tăng kích thước của mảng là array[11]. Ngoài ra nếu bạn muốn, bạn có thể kiểm tra 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

Hãy thử điều này:

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; 
} 
Các vấn đề liên quan