Buonasera a tutti quelli che leggeranno (e non risponderanno a) questo post , chiedo aiuto riguardo due problemini sui file.
1) Devo effettuare il caricamento di una matrice da file in cui le prime due righe contengono la dimensione delle righe e colonne, esempio:
4
4
8 2 1 4
0 2 0 2
0 0 8 1
0 0 0 2
La matrice deve essere allocata dinamicamente quindi, i miei passaggi sono:
a) apro il file, ne ricavo la dimensione e chiudo il file;
b) alloco il tipo nel main;
c) riapro il file per poter caricarne il contenuto e poi lo chiudo.
Fin qui ci siamo, ma nel terzo passaggio, avendo chiuso il file precedentemente e riaprendolo, la lettura del file avviene di nuovo dalla prima riga e quindi, nella matrice vengono inserite anche le due dimensioni delle righe e delle colonne. Per il momento ho ovviato il problema (molto furbamente direi eheh) ricavando nuovamente le dimensioni così:
void ins_matrice(char nomeFile[],float **Matrice,int r,int c){
fstream File;
File.open(nomeFile,ios::in);
File >> r; ---> PASSAGGI INCRIMINATI
File >> c; ---> PASSAGGI INCRIMINATI
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
File >> Matrice[i][j];
}
}
File.close();
}
Vorrei sapere se c'è un modo per evitare tutto ciò, indicando che bisogna acquisire gli elementi da una tot riga. Grazie mille
2) Stavo pensando... e se la dimensione non venisse specificata nel file e la matrice fosse di dimensione ignota, come dovrebbe avvenire l'acquisizione delle dimensioni della matrice per effettuare l'allocazione dinamica?
Attraverso un
while(!File.eof()) l'acquisizione avviene per elementi, dovrei quindi effettuare l'acquisizione delle righe come se fossero delle stringhe, cosicché letto un intero rigo, incremento la dimensione r? E per le colonne, poi? Vorrei un suggerimento perché non saprei proprio come muovermi. Grazie mille di nuovo