2011-11-28 31 views
5

Non so se sono solo un pazzo totale, molto probabilmente lo sono, è stata una lunga giornata, ma non funziona come voglio, e , beh, non vedo perché.Calcolo della somma di interi in un array

Dovrebbe essere possibile inserire 11 numeri, un nuovo numero su ogni riga, aggiungerli all'array, quindi sommarli, tuttavia non funziona. Non si ferma per uscire dal ciclo, anche se sto incrementando i.

Qualche idea?

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

tuo array ha spazio solo per 10 elementi. – Lee

+0

Se si dichiara una matrice di dieci numeri interi, gli indici validi vanno da 0 a 9; nel tuo codice usi anche array [10] che è l'undicesimo elemento di un array di dieci. Non conosco C, ma suppongo che possa essere un problema. I miei 2 centesimi –

+0

È "morso" molti di noi in un momento o nell'altro, non sempre quando eravamo principianti. Particolarmente complicato se ci si sposta avanti e indietro tra un linguaggio basato su C e uno (pochi) linguaggi di matrice 1 origine. –

risposta

4

Si dispone di 10 elementi nella matrice, numerati 0 - 9. Si sta traboccando il buffer, quindi tutte le scommesse sono disattivate. Questo è un comportamento indefinito.

+1

Ah jees, sapevo che era qualcosa di stupido , Pensavo che 10 array di elementi significassero da 0 a 10, quindi 11 elementi .. Solo io sono sciocco – PnP

3

Non è possibile aggiungere undici voci a un array di dieci elementi.

+0

Ma l'array inizia da 0, ho pensato, e da 0 a 10, sono 11 elementi. – PnP

+0

Oh jees, sapevo che era qualcosa di veramente stupido, Cheers – PnP

+0

@ user1048116 non è 0-10 però, ci sono 10 elementi in totale, quindi a partire da 0 che è 0 a 9 –

3

La mia ipotesi è un sovraccarico del buffer poiché le letture for-loop sono 11 numeri e l'undicesimo numero viene memorizzato all'esterno dell'array, probabilmente sovrascrivendo i.

Provare a cambiare il 11 a un 10 nel ciclo for.

2

Stai memorizzando undici numeri in una matrice di dimensione 10. Quindi stai memorizzando l'ultimo elemento fuori limite, che richiama il comportamento non definito.

La ragione per cui questo comportamento non definito si manifesta come un loop infinito nel tuo caso è probabilmente che i viene memorizzato dopo array in memoria nel sistema e quando si scrive un numero in array[10] (che è fuori dai limiti, come ho detto), stai sovrascrivendo i. Quindi, se inserisci un numero inferiore a 11, il loop continuerà e chiederai di nuovo l'input.

1

Se un array è un [10], ogni matrice inizia dal suo numero indice 0, quindi qui avrà 10 elementi; dato che le loro posizioni inizieranno da 0 a 9, il conteggio dà 10 elementi.

Si può provare questo:

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

Avete problemi con la vostra dichiarazione di matrice. Si sta definendo un array di dimensioni 10 array[10] e si dice che il programma calcoli la somma di elementi che risulta in overflow di memoria.

Per correggere il programma è sufficiente aumentare la dimensione dell'array come array[11]. Inoltre, se lo desideri, puoi controllare lo 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

Prova questo:

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