PDA

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)

Torav
27-12-2008, 20:25
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