Ciao!
Dato un file che contiene una serie di righe che contengono solo numeri interi separati da uno spazio, tipo nel formato:
"
210 630 22 102 435
240 500 35 923 234
0 611 152 883 238
14 57 64 613 846
96 635 856 535 22
"
e data una costante N definita a priori, vorrei estrapolare dal file una matrice quadrata di ordine N:
per esempio, con N = 4 e con quel file, la mia matrice deve essere
"
210 630 22 102
240 500 35 923
0 611 152 883
14 57 64 613
"
Ecco, sapendo per esempio che N = 4 e che il file contenga soltanto gli elementi utili per la mia matrice potrei benissimo farlo con un'istruzione del tipo
i=0;
while(fgets(riga, RIGA, fr) != NULL)
{
sscanf(riga, "%d %d %d %d", &matrice[i][0], &matrice[i][1], &matrice[i][2], &matrice[i][3]);
p = sscanf(riga, "%d %d %d %d", &matrice[i][0], &matrice[i][1], &matrice[i][2], &matrice[i][3]);
if(p != N)
{
printf("ERRORE - formato del file non corretto");
exit(4);
}
i++;
}
1° problema)
Ma così facendo, per esempio, se cambio il valore di N e metto N = 5 devo andare a modificare tutto il codice e aggiungere un altro "&matrice[i][4]", per cui questa istruzione è molto scomoda se voglio per esempio digitare il valore di N da tastiera (ammesso che voglio prendere tutte le righe dal file!)!
2° problema)
La funzione "sscanf" mi "scannerizza" l'intera riga del file e per ogni nuova riga parte dall'inizio ( ovvero sarebbe una sciocchezza scrivere
"
for(i=0; i<N; i++)
for(j=0; j<N; j++)
sscanf(riga[i][j], "%d", &matrice[i][j]);
"
, anche perché c'ho già provato e smette di funzionare tutto).
Allora, la mia domanda è:
dato un file formato da una serie di righe contenenti numeri interi ognuno separati da uno spazio, è possibile, man mano che si legge dal file un numero per volta, allocarli in una matrice quadrata di ordine N? o di ordine n (con n una costante acquisita da tastiera al momento dell'esecuzione)?