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