2011-11-28 19 views
5

No sé si solo estoy siendo un completo tonto, lo más probable es que haya sido un día largo, pero esto no está funcionando como yo quiero, y , bueno, no veo por qué.Cálculo de la suma de números enteros en una matriz

Debería poder tener 11 números ingresados, un nuevo número en cada línea, agregarlos al conjunto, luego sumarlos, pero simplemente no está funcionando. No se detiene para salir del ciclo, aunque estoy incrementando i.

¿Alguna 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

Su array sólo tiene espacio para 10 elementos. – Lee

+0

Si declara una matriz de diez enteros, los índices válidos son de 0 a 9; en tu código también usas array [10] que es el undécimo elemento de una matriz de diez. No sé C en absoluto pero supongo que puede ser un problema. Mis 2 centavos –

+0

Muchos de nosotros nos "mordieron" en un momento u otro, no siempre cuando éramos principiantes. Especialmente confuso si avanza y retrocede entre un lenguaje basado en C y uno de los (pocos) lenguajes de matriz de 1 origen. –

Respuesta

4

Tiene 10 elementos en la matriz, numerados del 0 al 9. Está desbordando el búfer, por lo que todas las apuestas están desactivadas. Este es un comportamiento indefinido.

+1

Ah jees, sabía que era algo estúpido , Pensé que la matriz de 10 elementos significaba de 0 a 10, por lo tanto, 11 elementos. Solo yo era tonto – PnP

3

No se puede agregar once entradas a una matriz de diez elementos.

+0

Pero la matriz comienza desde 0, pensé, y de 0 a 10, son 11 elementos. – PnP

+0

Oh jees, sabía que era algo realmente estúpido, Cheers – PnP

+0

@ user1048116 no es 0-10 sin embargo, hay 10 elementos en total, por lo que comenzando en 0 que es 0 a 9 –

3

Mi suposición es que el búfer se ha sobrepasado ya que el bucle for sale en 11 números y el número 11 se almacena fuera de la matriz, probablemente sobreescribiendo i.

Intente cambiar el 11 a un 10 en el ciclo for.

2

Está almacenando once números en una matriz de tamaño 10. Por lo tanto, está almacenando el último elemento fuera de límites, lo que provoca un comportamiento indefinido.

La razón de que este comportamiento no definido se manifiesta como un bucle infinito en su caso es probable que i se almacena después array en la memoria en el sistema y cuando se escribe un número en array[10] (que está fuera de límites, como dije), está sobrescribiendo i. Por lo tanto, si ingresó un número inferior a 11, el bucle continuará y solicitará una entrada una vez más.

1

Si una matriz es un [10], entonces cada matriz comienza desde su número de índice 0, de modo que aquí tendrá 10 elementos; dado que sus posiciones comenzarán de 0 a 9, contar da 10 elementos.

Puede probar esto:

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

Usted tiene problemas con su declaración de matriz. Está definiendo una matriz de tamaño 10 array[10] y diciendo que el programa calcule la suma de elementos que está provocando desbordamientos de memoria.

Para corregir el programa simplemente aumente el tamaño de la matriz como array[11]. También si lo desea, puede consultar el 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

Prueba esto:

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