2012-03-15 15 views
22
int main() { 
    int my array[3][3] = 
    10, 23, 42,  
    1, 654, 0, 
    40652, 22, 0 
    }; 

    printf("%d\n", my_array[3][3]); 
    return 0; 
} 

No puedo obtener la matriz para imprimir. ¿Alguna idea de por qué? Soy un programador principiante así que cualquier consejo es apreciado.Cómo imprimir la matriz?

+0

¿Falta algún código? Parece que te falta un paréntesis de apertura en el conjunto, así como un _ en la declaración my_array –

+0

solo una palabra de consejo: debes especificar el idioma en el que estás codificando para identificar mejor una solución adecuada :) – zero

+0

Ah, y deberías decirnos el error que obtienes, porque hay mucho margen para errores en ese código;) –

Respuesta

16

Lo que está haciendo es imprimir el valor en la matriz en el punto [3] [3], que no es válido para una matriz 3by3, debe recorrer todas las zonas e imprimirlas.

for(int i = 0; i < 3; i++) { 
    for(int j = 0; j < 3; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
} 

Esto imprimirá en el siguiente formato

10 23 42 
1 654 0 
40652 22 0 

si quieres más exacta formato que tendrá que cambiar la forma en que se formatee el printf.

+0

Si está programando en C++ también puede usar 'cout' en lugar de' printf' – trev9065

+0

@ trev9065 true pero usó 'printf' y no tenía un idioma establecido cuando respondí, así que me quedé con' printf'. – twain249

+0

Gracias, eso ayudó, olvidé que necesitaba usar un ciclo para mostrar todos los elementos ..:/ –

3

Parece que usted tiene un error tipográfico en su conjunto, debe decir:

int my_array[3][3] = {... 

Usted no tiene la _ o la {.

También my_array[3][3] es una ubicación no válida. Dado que las computadoras comienzan a contar al 0, está accediendo a la posición 4. (Las matrices son raras así).

Si desea sólo el último elemento:

printf("%d\n", my_array[2][2]); 

Si desea toda la matriz:

for(int i = 0; i < my_array.length; i++) { 
    for(int j = 0; j < my_array[i].length; j++) 
    printf("%d ", my_array[i][j]); 
    printf("\n"); 
} 
8

No hay ninguna propiedad .length en C. La propiedad .length sólo se puede aplicar a arreglos en lenguajes de programación orientada a objetos (OOP). La propiedad .length se hereda de la clase de objeto; la clase de todas las demás clases & heredan objetos en un lenguaje OOP. Además, uno usaría .length-1 para devolver el número del último índice en una matriz; usar solo .length devolverá la longitud total de la matriz.

Yo sugeriría algo como esto:

int index; 
int jdex; 
for(index = 0; index < (sizeof(my_array)/sizeof(my_array[0])); index++){ 
    for(jdex = 0; jdex < (sizeof(my_array)/sizeof(my_array[0])); jdex++){ 
     printf("%d", my_array[index][jdex]); 
     printf("\n"); 
    } 
} 

La línea (sizeof (my_array)/sizeof (my_array [0])) le dará el tamaño de la matriz en cuestión. El tamaño de la propiedad devolverá la longitud en bytes, por lo que se debe dividir el tamaño total de la matriz en bytes por cuántos bytes componen cada elemento, cada elemento ocupa 4 bytes porque cada elemento es de tipo int, respectivamente. La matriz es del tamaño total de 16 bytes y cada elemento es de 4 bytes por lo que los rendimientos 16/4 4 el número total de elementos en la matriz porque la indexación comienza en 0 y 1. No

+1

Esto no funcionaría si la matriz no es cuadrada ya que 'jdex' está formando un bucle usando el tamaño de la matriz externa y no la interna. – JaviMerino

1

Usted podría intentar esto:

#include <stdio.h> 

int main() 
{ 
    int i,j; 
    int my_array[3][3] ={10, 23, 42, 1, 654, 0, 40652, 22, 0}; 
    for(i = 0; i < 3; i++) 
    { 
     for(j = 0; j < 3; j++) 
     { 
     printf("%d ", my_array[i][j]); 
     } 
    printf("\n"); 
    } 
    return 0; 
} 
Cuestiones relacionadas