Programma che scrive su file e lo salva

di il
5 risposte

Programma che scrive su file e lo salva

C'è qualche errore nel programma,potreste dirmi cosa perfezionare?grazie
#include <iostream>
#include <fstream>
using namespace std;
void scrivi_file(char nomefile,int v[4]={'a','b','c','d'})
{
cout<<"scrivi il nome del file";
cin >> nomefile;
fstream input;
input.open(nomefile,ios::in);
for(i=0;i<=4;i++)
{
input << v[4]<<endl;
}
input.close();
}
void salva_file(int v[4], char nomefile[])
{
fstream output;
output.open(nomefile,ios::out);
for (int i = 0; i < 4; i++)
{
output << v[4];
}
output.close();
}
}
int main()
{scrivi_file(nomefile[],v[4]);
salva_file(nomefile[],v[4]);

system("PAUSE");
return 0;
}

5 Risposte

  • Re: Programma che scrive su file e lo salva

    E' bello sapere che dopo tutte le spiegazioni che ti ho dato non hai appreso neanche una virgola. Ma dove programmi su Blocco Note? Il tuo compilatore non ti dice quali sono li errori che hai commesso nel codice. Tempo fà abbiamo parlato di passaggio per riferimento, e dopo una lunga spiegazione hai esclamato che hai capito. Buttare righe a caso su un editor non si chiama programmare e sono esausto di spiegarti le stesse cose perennemente. Per l'ultima volta.
    I tuoi errori sono:
    
    salva_file accetta un vettore di int e una stringa 
    
    L'errore che vedo solo dalla definizione è che siccome stai lavorando in C++ e non in C sarebbe stato meglio dichiarare la funzione in questo modo:
    
    void salva_file(const int[] & vettore, const std::string & nomeFile)
    
    perche ho messo i const: perche nella tua funzione tu NON MODIFICHI i valori del vettore e il nome del file.
    
    Dal main li stai passando due variabili: un nomefile e un array di int che NON SI SA DA DOVE ARRIVANO. Chi li ha creati, dove sono creati, dove sono definiti ecc.
    
    dentro il for stai scrivendo la posizione numero 5 (v[4] significa v[0] + 4 che NON è una posizione valida) visto che stai usando una variabile i per attraversare tutto il vettore dovresti usare questa variabile x mettere i valori dentro lo stream, quindi codice corretto:
    
    output << v[i];
    
    Questa comporta che "i" non raggiunga mai il numero 4 (da notare l'espressione di controllo i < 4) e che vengano scritti i valori di : v[0],v[1],v[2],v[3].
    
    
    void scrivi_file(char nomefile,int v[4]={'a','b','c','d'})
    
    qui stai passando un char chiamato nomefile e non una stringa in C e un non so cosa (un vettore costante forse)
    anche quì per la stessa ragione di prima sarebbe stato meglio definire la funzione così
    
    void scrivi_file(int v[] & vettore,std::string nomeFile)
    
    dal main li stai passando le stesse variabili create nella tua mente forse ma non nel codice.
    
    fstream è un file di INPUT quindi dal file tu prendi dati e li metti nel vettore. Stessa situazione di prima ma a parti cappovolte. Codice giusto:
    
    input >> v[i];
    
    Questa comporta che ogni cella del vettore prenda i dati dal stream di input ad ogni incremento di i quindi v[0], v[1],v[2],v[3] e STOP perche l'espressione di controllo i < 4 non lascia prosseguire.
    
    VOTO per questo esercizio: 2
  • Re: Programma che scrive su file e lo salva

    Ho corretto così:
    #include <iostream>
    #include <fstream>
    using namespace std;
    void scrivi_file(const int &v[], char &nomefile)
    {
    cout<<"scrivi il nome del file";
    cin >> nomefile;
    fstream input;
    input.open(nomefile,ios::in); //assumo che vuoi un semplice txt
    for(i=0;i<4;i++)
    {
    input << v<<endl; // cin e' dello standard input, non scrivera' niente sul tuo file
    }
    input.close();
    }
    void salva_file(const int v[] &v[], char &nomefile)

    {
    fstream output;
    output.open(nomefile,ios::out);
    for (int i = 0; i < 4; i++)
    {
    output << v;
    }
    output.close();
    }
    }
    int main()
    {char nomefile;
    const int v[4]={'a','b','c','d'};
    scrivi_file(nomefile[],v[4]);
    salva_file(nomefile[],v[4]);

    system("PAUSE");
    return 0;
    }
  • Re: Programma che scrive su file e lo salva

    Premesso che non sei stata tu a correggerlo se no avresti tolto anche i commenti. Magari hai fatto solo il main e anche quello l'hai fatto male. Concludiamo l'opera con:
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    void leggi_da_file(int &v[], string & nomefile)
    {
    	cout<<"scrivi il nome del file";
    	cin >> nomefile;
    	fstream input;
    	input.open(nomefile,ios::in); 
    	
    	if(input.good())
    	{
    		for(i=0;i<4;i++)
    		{
    			input >> v[i]; 
    		}
    		input.close();
    	}
    }
    
    void salva_su_file(const int &v[], const string & nomefile)
    {
    
    	fstream output;
    	output.open(nomefile,ios::out);
    
    	if(output.good()
    	{
    		for (int i = 0; i < 4; i++)
    		{
    			output << v[i];
    		}	
    		output.close();
    	}
    }
    
    int main()
    {
    	string nomefile;
    	int v[4] = {0};
    
    	leggi_da_file(v,nomefile);
    	salva_su_file(v,nomefile);
    
    	system("PAUSE");
    	return 0;
    }
    
    Il problema è che come sempre hai imparato niente.
  • Re: Programma che scrive su file e lo salva

    No no,l'ho corretto io,i commenti che hai visto erano quelli di quando ho postato la domanda e li avevo tolti,poi il programma l'ho corretto io,lo prendo come un complimento comunque,posso sapere il significato di quel good?
  • Re: Programma che scrive su file e lo salva

    Comunque non so perchè ma il tuo programma mi dà di nuovo errore,però da come hai scritto tu il vettore v da scrivere sul file non è una costante,invece il mio è costante,è v[4]={'a' ,'b' ,'c' ,'d'}
Devi accedere o registrarti per scrivere nel forum
5 risposte