PDA

Visualizza la versione completa : Problema lettura matrice da file con tappo!


Giovanx
14-06-2017, 11:24
Salve a tutti,
Sono incappato in un problema da un paio di giorni ma che non riesco a risolvere in alcun modo.
Devo leggere da file txt una matrice interi disposti per righe che come ultimo elemento presenta un '-1' che mi sta ad indicare che la matrice Ŕ finita, il numero di righe e di colonne non Ŕ conosciuto.
Il file di tipo testo sarÓ del tipo:
1 2 4
3 5 6
-1
Il programma dovrÓ leggere la matrice (e poi farci altre operazioni)
1 2 4
3 5 6


Tutte le letture da file di matrici le ho sempre fatte conoscendo il numero di righe e di colonne, quindi questa specifica mi ha colto di sorpresa, non sono uno che si arrende quindi vorrei venirne a capo.
Fino ad ora ho provato in vari modi: cercando di contare gli spazi vuoti in una riga per poi aggiungerci 1 ed avere il numero di colonne, tentando anche varie strada.
Sono giunto a un punto di svolta (secondo il mio modesto parere) o meglio, mi sento sulla strada giusta ma comunque ora mi Ŕ sorto un altro gigantesco dubbio.
Per il momento sono riuscito a fare una cosa del genere:




void conta(ifstream &in, int &righe, int &colonne){
righe=0;
colonne=0;
stringa miofile;
fstream file;
cout<<"Inserisci il nome del file da aprire: "<<endl;
cin.getline(miofile,MAX);
file.open(miofile,ios::in);
while(!file.eof())
{

getline(file,miofile, '\n');
colonne=miofile.size();
righe++;

}
file.close();

cout<<righe<<"-"<<colonne;
cin.get();

}


Scusate ma ho problemi di formattazione del testo...
Devo ancora migliorare questa funzione (al momento non funziona) , devo ragionare su come passare i parametri etc, ma scritto tutto nel main funzionava...


Ora il problema che in questo modo non utilizzo il tappo (il mio '-1' terminatore di matrice) ma conto indifferentemente dalla presenza del tappo o meno il numero di righe e di colonne.
Ovviamente vanno utilizzati i sottoprogrammi.
Come potrei modificare l'algoritmo in modo che conti le colonne e le righe finchŔ non incontra il tappo? oppure dovrei ragionare in altri termini con questo tappo?


Help!

Loading