PDA

Visualizza la versione completa : [C] Caricare un array multidimensionale


kataklisma
03-12-2009, 19:41
Salve ragazzi mi sono posto un quesito, ho la necessità di creare una stringa formata dai caratteri di una riga di un'array m[n][n].

Array:

asdf
xcvb
cdfs
dxdg

stringa1 = asdf

per caricare il vettore utilizzo questo :




for(i=0;i<=n;i++){
for(k=0;k<=n;k++){
printf("%d-%d \n",i,k);
M[i][k] = getchar();
}
}



ma stampando con la printf nel ciclo for noto che alcune posizioni vengono saltate e che l'array seppure abbia il numero degli elementi richiesti sballa le loro posizioni.Vorrei caricare l'array nel seguente modo:

m[0][0] m[0][1]
m[1][0] m[1][1]
ecc ecc

oregon
03-12-2009, 19:59
Guarda che gli array in C hanno indice che va da 0 a n-1

Quindi deve essere

for(i=0; i<n; i++){
for(k=0; k<n; k++){

kataklisma
03-12-2009, 20:01
Ci ho provato....cosi mi carica solo due elementi se per esempio n è uguale a 2....

oregon
03-12-2009, 20:02
Che vuoi dire ?

Inoltre, puoi mostrare la dichiarazione dell'array ?

kataklisma
03-12-2009, 20:03
int n,i,k;

scanf("%d",&n);

char M[n][n];

printf("Tabella");


for(i=0;i<n;i++){
for(k=0;k<n;k++){
printf("%d-%d \n",i,k);
M[i][k] = getchar();
}
}

oregon
03-12-2009, 20:11
Ti confermo che devi usare i cicli da 0 a n-1 e ti ricordo che l'input da tastiera bufferizzato considera anche il tasto "Invio" che pressi per accettare i dati. Per evitare questo problema, devi pulire il buffer dopo ogni input.



scanf("%d",&n);
while(!getchar());


M[i][k] = getchar();
while(!getchar());


Infine, considera che l'allocazione di un array così come hai fatto è caratteristico dello standard C99 che non è usato da tanti compilatori (probabilmente tu utilizzi DevCpp con mingw ...). Sarebbe meglio utilizzare l'allocazione dinamica dell'array e un puntatore opportuno.

YuYevon
03-12-2009, 20:15
oregon, non dovrebbe essere



while ( getchar() != '\n' );


?

kataklisma
03-12-2009, 20:19
Originariamente inviato da oregon
Ti confermo che devi usare i cicli da 0 a n-1 e ti ricordo che l'input da tastiera bufferizzato considera anche il tasto "Invio" che pressi per accettare i dati. Per evitare questo problema, devi pulire il buffer dopo ogni input.



scanf("%d",&n);
while(!getchar());


M[i][k] = getchar();
while(!getchar());


Infine, considera che l'allocazione di un array così come hai fatto è caratteristico dello standard C99 che non è usato da tanti compilatori (probabilmente tu utilizzi DevCpp con mingw ...). Sarebbe meglio utilizzare l'allocazione dinamica dell'array e un puntatore opportuno.

Grazie infinite.....che svista enorme!!!!

Loading