Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [c++] Cambiare nome stream

    All'interno di un ciclo vorrei che ogni volta venisse aperto un file diverso per salvarci dei dati, avevo pensato a una cosa del genere ma non funziona, non riesco a inserire il numero nella stringa, come posso fare?
    codice:
    #include <stdio.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    FILE* prova;
    string s;
    for (int i=0;i<3;i++){
    
    	s="C:\\prova"+i+".dat";
    	
    	prova=fopen(s.c_str(),"w");
    
    	fprintf(prova,"valore %i",i);
    }
    
    fclose(prova);
    
    
    return 0;
    
    
    
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++] Cambiare nome stream

    In C++ è meglio usare <fstream> comunque.
    codice:
    #include <stdio.h>
    #include <string>
    #include <sstream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    string s;
    ostringstream oss;
    for (int i=0;i<3;i++){
    
    	oss <<"C:\\prova"<<i<<".dat";
    	s= oss.str();
    	ofstream prova(s.c_str(),"w");
            if (prova) {
            	prova << "valore " << i << endl;
            }
    }
    return 0;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    ok grazie l'ho leggermente modificato che non funzionava bene
    codice:
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    string s;
    
    for (int i=0;i<3;i++){
    ostringstream oss (ostringstream::in);
    	oss <<"C:\\prova"<<i<<".dat";
    	s= oss.str();
    	ofstream prova(s.c_str());
    	 cout << oss.str()<<"\n";
    	cout<< s<<"\n";
            	prova << "valore " << i << endl;
    
    
    		getchar();
    }
    return 0;
    }

  4. #4
    ma un modo simile usando fopen non esiste?!

  5. #5
    una soluzione è combinare i due listati

    codice:
    #include <stdio.h>
    #include <string>
    #include <sstream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    
    FILE* prova;
    string s;
    ostringstream oss;
    for (int i=0;i<3;i++){
    
    	oss <<"C:\\prova"<<i<<".dat";
    	s= oss.str();
    
    	prova=fopen(s.c_str(),"w");
    
    	fprintf(prova,"valore %i",i);
    
    }
    return 0;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da mondobimbi
    una soluzione è combinare i due listati

    codice:
    #include <stdio.h>
    #include <string>
    #include <sstream>
    #include <fstream>
    using namespace std;
    
    ...
    Avrei suggerito la stessa cosa ma bisogna "resettare" il contenuto di "oss" ad ogni iterazione altrimenti il primo file aperto sarà C:\prova0.dat, poi C:\prova0.datC:\prova1.dat poi ancora C:\prova0.datC:\prova1.datC:\prova2.dat...

    basta aggiungere l'istruzione

    codice:
    oss.str("");
    alla fine del blocco del for, così da cancellare il contenuto di oss() prima di andarci a scrivere di nuovo.

    Inoltre suggerirei la chiusura degli stream alla fine del ciclo for con fclose(prova);

    Tra l'altro, valentino86, come diceva Shodan è di gran lunga meglio usare la classe fstream se si parla di C++.
    every day above ground is a good one

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da YuYevon
    Avrei suggerito la stessa cosa ma bisogna "resettare" il contenuto di "oss" ad ogni iterazione altrimenti il primo file aperto sarà C:\prova0.dat, poi C:\prova0.datC:\prova1.dat poi ancora C:\prova0.datC:\prova1.datC:\prova2.dat...
    Vero se l'ostringstream fosse esterno al ciclo. Creandolo all'interno viene distrutto e ricreato ogni volta.

    X Valentino86
    codice:
    ostringstream oss (ostringstream::in);
    non ha senso. ostringstream è uno stream di uscita non di entrata.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.