Funzione di stampa in C++
Buongiorno,
è possibile creare una funzione in C++ che possa stampare dati sia sullo stream di output che su un altro stream?
Per esempio:
se voglio stampare a video un array di struct e allo stesso tempo caricalo (con le stesse diciture) su un file posso creare una funzione che mi permetta di farlo semplicemente richiamandola due volte e specificando lo stream senza dover riscrivere tutto il codice?
Grazie mille e buona giornata!
è possibile creare una funzione in C++ che possa stampare dati sia sullo stream di output che su un altro stream?
Per esempio:
se voglio stampare a video un array di struct e allo stesso tempo caricalo (con le stesse diciture) su un file posso creare una funzione che mi permetta di farlo semplicemente richiamandola due volte e specificando lo stream senza dover riscrivere tutto il codice?
Grazie mille e buona giornata!
Risposte
Perché pensi di non poterlo fare?
Salvo errori è dai tempi di K&R che si usa fprintf...
Salvo errori è dai tempi di K&R che si usa fprintf...
Ciao reda99, grazie per l'aiuto!
In realtà il punto è che non so come farlo (sto studiando per un esame di informatica di base all'università ma non l'ho mai fatta prima e quindi non ne so molto...).
Ma fprintf non è una funzione del linguaggio C (ho provato a cercare un attimo su internet...)?
Mi sa di essermi spiegato male: ho capito come scrivere sui file in C++ ma mi stavo chiedendo se è possibile specificare (tra i parametri che passi a una funzione) uno stream sul quale si vuole agire.
Ad esempio se voglio stampare "ciao" sia a video che su un file dovrei scrivere:
cout<<"ciao";
f<<"ciao"; (a patto che f sia un ofstream per un determinato file...)
È possibile creare una funzione del tipo:
void stampa(???){}
nella quale possa specificare cout e f per stampare tutto in una volta chiamando:
stampa(cout);
stampa(f);
In questo modo se al posto di "ciao" dovessi stampare qualcosa di molto più lungo e complesso (e magari su più di 2 stream) potrei evitare di copiare n volte il codice che mi permette la stampa sostituendo tutte le volte lo stream tra i parametri che passo alla funzione stampa(???){} e limitandomi a chiamarla n volte.
Grazie ancora!
In realtà il punto è che non so come farlo (sto studiando per un esame di informatica di base all'università ma non l'ho mai fatta prima e quindi non ne so molto...).
Ma fprintf non è una funzione del linguaggio C (ho provato a cercare un attimo su internet...)?
Mi sa di essermi spiegato male: ho capito come scrivere sui file in C++ ma mi stavo chiedendo se è possibile specificare (tra i parametri che passi a una funzione) uno stream sul quale si vuole agire.
Ad esempio se voglio stampare "ciao" sia a video che su un file dovrei scrivere:
cout<<"ciao";
f<<"ciao"; (a patto che f sia un ofstream per un determinato file...)
È possibile creare una funzione del tipo:
void stampa(???){}
nella quale possa specificare cout e f per stampare tutto in una volta chiamando:
stampa(cout);
stampa(f);
In questo modo se al posto di "ciao" dovessi stampare qualcosa di molto più lungo e complesso (e magari su più di 2 stream) potrei evitare di copiare n volte il codice che mi permette la stampa sostituendo tutte le volte lo stream tra i parametri che passo alla funzione stampa(???){} e limitandomi a chiamarla n volte.
Grazie ancora!
Puoi fare qualcosa come il seguente:
#include <fstream> #include <iostream> void stampaSuStream(std::ostream& output) { output << "Hello World!\n"; } int main() { stampaSuStream(std::cout); std::fstream f("hello.txt", std::ios::out); stampaSuStream(f); f.close(); return 0; }
Quindi in pratica passo lo stream per riferimento alla funzione?
Grazie a entrambi!
Solo per essere sicuro:
la specifica std:: può essere evitata scrivendo dopo gli #include
using namespace std;
e ios::out si può sostituire definendo direttamente
ofstream f("hello.txt").
Domanda tecnica per le prossime volte: mi potresti per favore dire come fai a scrivere il codice perché non capisco e (per rispetto verso gli utenti) mi sembra giusto impararlo.
Grazie!
Solo per essere sicuro:
la specifica std:: può essere evitata scrivendo dopo gli #include
using namespace std;
e ios::out si può sostituire definendo direttamente
ofstream f("hello.txt").
Domanda tecnica per le prossime volte: mi potresti per favore dire come fai a scrivere il codice perché non capisco e (per rispetto verso gli utenti) mi sembra giusto impararlo.
Grazie!
Esatto. Per inserire il codice tra i tag [tt][code][/tt] e [tt][/ code][/tt] (in quest'ultimo devi togliere lo spazio che ho aggiunto per poterlo visualizzare nel mio post). C'è in alternativa il pulsante [tt]Code[/tt] nell'editor avanzato.
Grazie!
Ho provato a farlo e l'anteprima di pubblicazione lo interpreta correttamente.
Buona giornata!
Ho provato a farlo e l'anteprima di pubblicazione lo interpreta correttamente.
Buona giornata!