2012-03-15 11 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; 
} 

Non riesco a stampare la matrice .. Qualche idea perché? Sono un programmatore principiante quindi ogni parola di consiglio è apprezzata.Come stampare la matrice?

+0

manca parte del codice? Sembra che manchi una parentesi di apertura sull'array, nonché un _ nella dichiarazione my_array –

+0

solo una parola di consiglio: dovresti specificare la lingua che stai codificando in modo da identificare meglio una soluzione corretta :) – zero

+0

Oh, e dovresti dirci l'errore che ricevi, perché c'è molto spazio per errori in quel codice;) –

risposta

16

Quello che stai facendo è stampare il valore nell'array in spot [3] [3], che non è valido per un array 3by3, è necessario eseguire il loop su tutti gli spot e stamparli.

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

Questo stamperà nel seguente formato

10 23 42 
1 654 0 
40652 22 0 

se volete più precisa formattazione si dovrà modificare la modalità di printf è formattato.

+0

Se stai programmando in C++ puoi anche usare 'cout' invece di' printf' – trev9065

+0

@ trev9065 true ma ha usato 'printf' e non aveva una lingua dichiarata quando ho risposto quindi mi sono bloccato con' printf'. – twain249

+0

Grazie, mi ha aiutato, ho dimenticato che avevo bisogno di usare un ciclo per visualizzare tutti gli elementi ..:/ –

3

Sembra che si dispone di un errore di battitura sul vostro array, si dovrebbe leggere:

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

Non è la _ o {.

Anche my_array[3][3] è una posizione non valida. Poiché i computer iniziano a contare allo 0, si accede alla posizione 4. (Gli array sono strani come quello).

Se si desidera solo l'ultimo elemento:

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

Se si desidera che l'intero array:

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

Non v'è alcuna proprietà .length in C. La proprietà .length può essere applicato solo agli array in linguaggi di programmazione orientata agli oggetti (OOP). La proprietà .length è ereditata dalla classe dell'oggetto; la classe tutte le altre classi & oggetti ereditate da in una lingua OOP. Inoltre, si userebbe .length-1 per restituire il numero dell'ultimo indice in una matrice; usando solo il .length restituirà la lunghezza totale dell'array.

Vorrei suggerire qualcosa di simile:

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 linea (sizeof (my_array)/sizeof (my_array [0])) vi darà la dimensione della matrice in questione. La proprietà sizeof restituirà la lunghezza in byte, quindi è necessario dividere la dimensione totale della matrice in byte di quanti byte costituiscono ciascun elemento, ogni elemento occupa 4 byte poiché ogni elemento è di tipo int, rispettivamente. La matrice è di dimensioni totali 16 byte e ogni elemento è di 4 byte così 16/4 rese 4 il numero totale di elementi nell'array perché indicizzazione inizia da 0 e non 1.

+1

Questo non funzionerebbe se la matrice non è quadrata poiché 'jdex' sta eseguendo il ciclo usando la dimensione dell'array esterno e non quello interno. – JaviMerino

1

Si potrebbe provare questo:

#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; 
}