View Full Version : [C++] utilizzo dell'header<fstream> per scrittura su file
Spanaccio
27-12-2008, 16:10
Salve a tutti! Mi chiedevo: facendo un programma con le liste..come posso stampare su file il risultato della funzione "stampa lista" dopo che ho inserito tutti i dati??
wizard1993
27-12-2008, 16:21
crei una funzione che accetta come parametro uno stream che poi sia cout cerr clog ifstream ofstream o chi per loro te ne dovrebbe importare poco, inoltre visto che mi sa di esercizio scolastico mi rifiuto di fornirti esempi belli e pronti
Spanaccio
27-12-2008, 16:28
Grazie mille! Solo che sto alle prime armi col C++ e ti garantisco che non è un esercizio scolastico XD !! Ho fatto un programma per catalogare i miei vinili..e mi sarebbe piaciuto stmparli su un file di testo!! Mi accontento anche di un link dove viene spiegato il file stream.. purtroppo sul libro dove studio è fatto male..e facendo da autodidatta non ho altre soluzioni! Grazie ancora
wizard1993
27-12-2008, 16:37
allora la cosa è molto semplice te hai presente l'oggetto cout? è la stessa identica cosa.
qui trovi quello che ti serve sapere
http://www.cplusplus.com/reference/iostream/fstream/fstream.html
Spanaccio
27-12-2008, 17:08
La funzione per stampare a video l'ho fatta cosi:
void stampa_lista(lista output)
{
lista p=output;
while(p!=0)
{
cout<<endl<<p->artista<<'\n'<<p->album<<'\n'<<p->anno<<'\n'<<'\n';
p=p->succ;
}
}
Non riesco a fare quella per stamparlo su file..ho provato cosi ma mi dà errore:
void stampa_file(fstream flusso)
{
flusso << stampa_lista(lista output);
}
stdecden
27-12-2008, 17:21
Non sarebbe meglio usare le STL???
wizard1993
27-12-2008, 17:31
La funzione per stampare a video l'ho fatta cosi:
void stampa_lista(lista output)
{
lista p=output;
while(p!=0)
{
cout<<endl<<p->artista<<'\n'<<p->album<<'\n'<<p->anno<<'\n'<<'\n';
p=p->succ;
}
}
Non riesco a fare quella per stamparlo su file..ho provato cosi ma mi dà errore:
void stampa_file(fstream flusso)
{
flusso << stampa_lista(lista output);
}
perchè dici al fusso di stampare un void, invece te devi passare a stampa lista il flusso e sostituire cout con flusso, o dischiarlo all'interno dipo così
void stampa_lista(fstream out, lista output){
lista p=output;
while(p!=0)
{
out<<endl<<p->artista<<'\n'<<p->album<<'\n'<<p->anno<<'\n'<<'\n';
p=p->succ;
}
}
capito?
Spanaccio
27-12-2008, 19:18
Giustoo!! Ho capito il ragionamento..l'unica cosa è che il compilatore mi da molti errori alla finzioni..non fa compilarlo!!
wizard1993
27-12-2008, 19:45
avevo sbagliato a scrivere, ora dovrebbe andare se non ho sbagliato di nuovo, vado di corsa quindi forse qualcosa mi è sfuggito
Spanaccio
27-12-2008, 20:03
Grazie adesso è perfetto! Nel main ho scritto:
lista catalogo=0;
fstream flusso;
flusso.open("Vinile.txt" , ios::out);
flusso<<stampa_file(flusso,catalogo);
flusso.close();
ma mi da un errore con scritto:"// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 50. Copy constructor and assignment operator of ios_base
private:
ios_base(const ios_base&);" ..vedrò di risolvere! Grazie ancora
wizard1993
27-12-2008, 20:08
Grazie adesso è perfetto! Nel main ho scritto:
lista catalogo=0;
fstream flusso;
flusso.open("Vinile.txt" , ios::out);
flusso<<stampa_file(flusso,catalogo);
flusso.close();
ma mi da un errore con scritto:"// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 50. Copy constructor and assignment operator of ios_base
private:
ios_base(const ios_base&);" ..vedrò di risolvere! Grazie ancora
non ho un compilatore a portata di mano ma prova a sostiture
flusso<<stampa_file(flusso,catalogo);
con
stampa_file(&flusso,catalogo)
ti basta definire la funzione in questo modo:
void stampa_file(fstream &flusso)
{
// corpo
}
questo perchè quando si tratta di stream devi sempre operare con indirizzi (cioè puntatori o reference)
Spanaccio
28-12-2008, 18:07
Facendo come ha suggerito wizard il programma va ma crea un file di testo vuoto!!!
wizard1993
28-12-2008, 21:48
Facendo come ha suggerito wizard il programma va ma crea un file di testo vuoto!!!
ma catalogo lo inizializzi mai con qualcosa di non vuoto?
Spanaccio
29-12-2008, 19:21
Apposto!!Risolto..non l'avevo messo nello switch.. :D:D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.