PDA

Visualizza la versione completa : [C++] Riempimento di una matrice convertendo da linguaggio C


Mephysto92
01-06-2012, 19:11
Ciao ragazzi..sto cercando di convertire questo pezzo di codice scritto in C...in C++ !
Il pezzo di codice è una funzione chiamata leggi_mat che legge da file il riempimento ed i valori di una matrice quadrata.


void leggi_mat (matrice mat, int &riemp, const stringa filename){
int i,j;
FILE *fp_in;

fp_in=fopen(filename,"r");
if (!fp_in){
cout<<"\nIl file "<<filename<<" non e' stato trovato!\nImpossibile proseguire l'elaborazione.\n\n";
system("PAUSE");
exit (1);
}
fscanf(fp_in, "%d", &riemp);
for (i=0; i<riemp; i++)
for (j=0; j<riemp; j++)
fscanf(fp_in,"%d",&mat[i][j]);
fclose(fp_in);
}


Questa è la chiamata che si trova nel main


cout<<"Inserire il nome del file contenente la prima matrice: ";
cin>>nomefile;
leggi_mat(M1,riempM1,nomefile);


Potreste aiutami e dirmi solamente come iniziare ??? Grazie

oregon
01-06-2012, 19:17
Utilizza la classe fstreama posto delle fopen fscanf fclose

Mephysto92
01-06-2012, 19:52
Mi sorge un dubbio: come faccio a chiedere all'utente il nome del file da aprire ??? Ho provato così ma credo che non vada affatto bene




string nomefile;
cout<<"Inserisci il nome del file da aprire:"<<"\n";
cin>>nomefile;

ifstream indata;
indata.open("nomefile.txt");



:confused:

oregon
01-06-2012, 19:59
Va bene ma se hai usato la variabile nomefile perché poi non la usi nella open?

Mephysto92
01-06-2012, 20:04
Scusa non capisco cosa vuoi dire :shy:

Scara95
01-06-2012, 20:08
A me non sembrava propriamente C il codice da te postato comunque...
In ogni caso dovresti usare nomefile al posto di "nomefile.txt"

Mephysto92
01-06-2012, 20:15
Ho fatto come mi hai suggerito ma non me lo compila :confused:



string nomefile;
cout<<"Inserisci il nome del file da aprire:"<<"\n";
cin>>nomefile;

ifstream indata;
indata.open(nomefile);


Comunque il file che voglio aprire è per forza .txt ...cambia qualcosa ?

RooccoXXI
01-06-2012, 20:16
Originariamente inviato da Scara95
A me non sembrava propriamente C il codice da te postato comunque...
In ogni caso dovresti usare nomefile al posto di "nomefile.txt"

Non funziona solo con il C++11?

oregon
01-06-2012, 20:18
Perché è necessario un vettore di char per il nome e la modalità, quindi

indata.open(nomefile.c_str(), ifstream::in);

Vedi

http://www.cplusplus.com/reference/iostream/ifstream/open/

RooccoXXI
01-06-2012, 20:35
Originariamente inviato da oregon
Perché è necessario un vettore di char per il nome e la modalità, quindi

indata.open(nomefile.c_str(), ifstream::in);

Vedi

http://www.cplusplus.com/reference/iostream/ifstream/open/

In C++11 puoi utilizzare direttamente utilizzare le std::string, senza fare una conversione in char*:


indata.open(nomefile, ifstream::in);

L'opzione da passare al compilatore per attivare il C++11 é


-std=c++0x

Loading