Scrittura su file, NON SCRIVE !

di il
30 risposte

Scrittura su file, NON SCRIVE !

Come da titolo il mio problema è che il mio programma non scrive sul file che ho comunque creato ed inserito nella stessa cartella del progetto.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main (int argc, char * const argv[]) {
 
		//dichiarazione delle variabili
	
	ifstream inFile; //variabile di flusso per il file di imput
	ofstream outFile; //variabile di flusso per il file di output
	
	double test1, test2, test3, test4, test5;
	double media;
	
	string nome;
	string cognome;
	
	inFile.open("test.txt");
	outFile.open("testavg.txt");
	
		
	inFile>>nome;
	inFile>>cognome;
	
	outFile << "nome candidato :" << nome << cognome;
	
	inFile>>test1;
	inFile>>test2;
	inFile>>test3;
	inFile>>test4;
	inFile>>test5;
	
	outFile<<"punteggio "<<" "<<test1<<" "<<test2<<" "<<test3<<" "<<test4<<" "<<test5;
	
	media=(test1+test2+test3+test4+test5)/5.0;
	
	outFile <<" la media è "<<media;
	
	inFile.close();
	outFile.close();
    
	
	
	return 0;
}
il programma compila, qualche può essere il problema?


nel test.txt ho inserito il seguente testo: pippo baudo 5.6 6.7 4 5 6
e nel testavg.txt non ho inserito alcun testo

che ne dite?

30 Risposte

  • Re: Scrittura su file, NON SCRIVE !

    http://www.cplusplus.com/reference/iostream/fstream/open/
  • Re: Scrittura su file, NON SCRIVE !

    Devi specificare il tipo di apertura:
        fstream inFile, outFile;
    
       inFile.open("test.txt", fstream::in);
       outFile.open("testavg.txt", fstream::out);
  • Re: Scrittura su file, NON SCRIVE !

    Niente non funziona, forse il percorso è sbagliato?
  • Re: Scrittura su file, NON SCRIVE !

    Ho capito che non funzionava su mac, su windows ci riesco , ora erò il mio dubbio è un altro:

    in questo modo posso accedere ad una parola per volta, ma se volessi caricare tutte le parole con un solo comando, ad esempio inserendole in un array, come mi consigliate di fare?
  • Re: Scrittura su file, NON SCRIVE !

    Ho risolto da solo in questo modo:
    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        fstream in;
        fstream out;
      
        char v[50] ;
        
        in.open("test.txt",ios::in);
        out.open("test2.txt",ios::out);
        while(!in.eof()){
                         for(int i=0;i<50;i++)
        in>>v[i];
        }
        
    
       for(int i=0;i<50;i++)
        cout<<v[i];
        
         for(int i=0;i<50;i++)
        out<<v[i];
        
        in.close();
        out.close();
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    anche se mi stampa tutti le parole senza spazio e alla fine mi aggiunge altro

    ecco i due file

    test1:
    viva la vida loca

    test2
    vivalavidaloca\0 R à?R ‡ý“ ø3 3 ˆ
  • Re: Scrittura su file, NON SCRIVE !

    Prova questo. Se vuoi spiegazioni chiedi pure.
    
    #include <iostream>
    #include <iterator>
    #include <fstream>
    #include <vector>
    #include <string>
    #include <algorithm>
    
    
    int main()
    {
    	std::vector<std::string> v;
    
    	std::ifstream in_("test.txt");
    	std::ofstream out_("test2.txt");
    	
    	if(in_.good())
    	{
    		std::copy(	std::istream_iterator<std::string,char>(in_),
    					std::istream_iterator<std::string,char>(),
    					std::back_inserter(v));
    		in_.close();
    	}
    
    
    	if(out_.good())
    	{
    		std::copy(v.begin(),v.end(),std::ostream_iterator<std::string,char>(out_," "));
    		out_.close();
    	}
    }
    
  • Re: Scrittura su file, NON SCRIVE !

    Skynet io intendevo è possibile una cosa simile?
    #include <iostream>
    #include <fstream>
    #define N 100
    using namespace std;
    
    int main () {
    	ifstream in;
    	ofstream out;
    	char  v[N];
    	in.open ("/Users/Genna/Desktop/calcolo/prog/prova.txt",ios::in);
    	out.open ("/Users/Genna/Desktop/calcolo/prog/prova2.txt",ios::out);
    	
    	for(int i=0;i<in.eof();i++)
    		in>>v[i];
    	for(int i=0;i<in.eof();i++)
    		out<<v[i]; 
    	
    	in.close();
    	out.close();
    }
  • Re: Scrittura su file, NON SCRIVE !

    Poi sto studiando C++ da meno di un mese, vado un po in confusione leggendo il C
  • Re: Scrittura su file, NON SCRIVE !

    Ma perche leggi carattere per carattere quando puoi leggere le stringhe in un colpo. L'operatore >> legge finché non trova uno spazio. Quindi invece di usare un vettore di caratteri usi, un vettore di stringhe. i < in.eof() non ha senso.puoi fare
    
    while(in.good())
    {
      in >> str; //dove str è di tipo stringa
      v.push_back(str); // dove v è del tipo vector<string>
    }
    
    per l'out puoi fare ancora meglio
    
    vector<string>::iterator it;
    for(it = v.begin(); it != v.end(); ++it)
        out << *it << " ";
    
    la stessa cosa ho fatto io sopra ma usando la funzione std::copy che mi permette di non usare i cicli.
  • Re: Scrittura su file, NON SCRIVE !

    Oppure puoi fare
    while(in>>str)
    {
      cout<<str<<" ";
    }
    oppure se vuoi tenere in memoria le parole
    int i=0;
    string str[100];
    
      while (in>>str[i])
    {
      cout<<str[i]<<" ";
      i++;
    }
  • Re: Scrittura su file, NON SCRIVE !

    E se ci fossero più di 100 parole?
  • Re: Scrittura su file, NON SCRIVE !

    E allora fa string str[1000] oppure.. se non gli servono le singole parole puo' fare
    while(getline(in,str[i]))
    {
     cout<<str[i];
     i++;
    } 
    non credo che utilizzerù più di 100 righe xD se fosse o aumenta oppure usa il tuo codice


    edit:
    ma a lui non servono in memoria >.< da quello che ha detto gli basta copiarli in un altro file quindi:
    while(getline(in,str))
    {
     cout<<str;
    out<<str;
    }
    no?
  • Re: Scrittura su file, NON SCRIVE !

    In realtà in futuri dovrò costruirmi degli array e delle matrici con quelle righe, quindi mi servono in memoria, e devo fare in modo che il vettore si costruisca man mano, (credo che si chiami allocazione dinamica) , prima non devo conoscere la sua lunghezza
  • Re: Scrittura su file, NON SCRIVE !

    Std::vector<T> è una classe che utilizza l'allocazione dinamica e che cresce alla richiesta dell'utente. impara ad utilizzarlo. Nei miei esempi hai mai visto una allocazione fatto a mano? no perche il vector lo fa di nascosto e senza errori.

    http://www.cplusplus.com/reference/stl/vector
Devi accedere o registrarti per scrivere nel forum
30 risposte