Ma scusa, perché questo problema? Avevi scritto nel primo post
while(fgets(riga, RIGA, fr) != NULL)
Adesso perché parli di fgetc ?
Ma scusa, perché questo problema? Avevi scritto nel primo post
while(fgets(riga, RIGA, fr) != NULL)
Adesso perché parli di fgetc ?
No MP tecnici (non rispondo nemmeno!), usa il forum.
si hai ragione scusami, ma come avevo detto studio da poco il c e non mi sono chiare alcune istruzioni, per esempio "sscanf(tmp++, "%d", &matrice[i][j]);" pensavo che la sscanf si usasse solo in corrispondenza di una stringa e in conoscenza dei campi da riempire e non ne conoscevo assolutamente l'utilizzo tramite puntatore, e visto che non l'hai scritto non ne comprendevo il senso, per questo mi chiedevo se prima del for ci stava una fgetc perché dal punto di vista sintattico viene usata per prelevare un carattere alla volta e mi sembrava molto più plausibile che lo avessi sottinteso, tra l'altro mi è ancora sconosciuto l'utilizzo dei puntatori, in pratica hai assegnato a tmp l'indirizzo del vettore riga[RIGA], che corrisponde all'indirizzo del suo primo elemento, e man mano spostandolo con tmp++, sposti l'indirizzo all'elemento successivo di riga[RIGA] così facendo che la sscanf appena preleva un intero di ferma, ignorando gli spazi con
"
while(*tmp && (*tmp)!=' ') tmp++;
"
l'ho capito solo adesso!! Ma comunque sia ho riscritto il codice corretto come hai detto tu in codeblocks e non funziona, benchè dal file mi ricava correttamente soltanto la prima riga.
Questo è il file "file.txt":
Questo è il codice che ho scitto in codeblocks:
"
#include <stdio.h>#include <stdlib.h>
#define N 4
#define RIGA 100
int main ()
{
char riga[RIGA];
char *tmp=riga;
int matrice[N][N], f, i , j;
FILE *fr;
fopen("file.txt", "r");
fr = fopen("file.txt", "r");
i=0;
while(fgets(riga, RIGA, fr) != NULL)
{
for (j=0; j<N; j++)
{
sscanf(tmp++, "%d", &matrice[i][j]);
while(*tmp && (*tmp)!=' ')
tmp++;
}
i++;
}
fclose(fr);
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
printf("%d ", matrice[i][j]);
printf("\n");
}
return 0;
}
"
Questo è l'output:
output.jpg
Ultima modifica di rino95; 25-01-2016 a 22:36
Hai fatto qualche errore ... ti mostro le correzioni ...
P.S. Devi usare i tag CODE per mostrare il codice e lo devi indentare altrimenti non si capisce nulla ...
codice:#include <stdio.h> #include <stdlib.h> #define N 5 // La matrice nel file e' 5x5 #define RIGA 100 int main () { char riga[RIGA]; int matrice[N][N], i, j; // f non e' utilizzata FILE *fr = fopen("file.txt", "r"); // La fopen va fatta una sola volta i=0; while(fgets(riga, RIGA, fr) != NULL) { char *tmp=riga; // Questa deve essere assegnata ad ogni nuova riga for (j=0; j<N; j++) { sscanf(tmp++, "%d", &matrice[i][j]); while(*tmp && (*tmp)!=' ') tmp++; } i++; } fclose(fr); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%d ", matrice[i][j]); printf("\n"); } return 0; }
No MP tecnici (non rispondo nemmeno!), usa il forum.
Allora il puntatore va dichirato ad ogni nuova riga? Adesso ho capito come mai mi veniva giusta soltanto la prima !! scusa ancora se sono stato così di coccio ma i puntatori proprio non sapevo come usarliTi ringrazio veramente sei stato molto paziente!!!