2014-09-09 3 views
0

J'ai une fonction void draw() dans une classe qui affiche les données membres de la classe à l'écran. Existe-t-il un moyen de sauvegarder toutes les données dans un fichier .txt en utilisant cette même fonction draw()?Enregistrer la sortie d'une fonction vide dans un fichier .txt

Je pensais que sur l'ajout d'une fonction d'aide qui reçoit un rendement ostream& et demande draw():

ostream& Widget::aid(ostream& tt) const 
{ 
    draw(); 
    return tt; 
} 

Le problème est, qu'une adresse est enregistrée dans le fichier au lieu de données lorsque je tente de le faire de cette façon .

+0

Est-ce une solution d'appeler le programme ./program> file.txt? Cela sauvera toute la sortie du programme dans file.txt dans la plupart des distributions Linux. Votre solution proposée ne changera rien non plus, puisque draw() utilise probablement std :: cout ou printf(). –

+1

Si votre fonction 'draw()' utilise 'std :: cout' alors vous pouvez utiliser' cout.rdbuf (newbuffer) 'en l'associant à une autre destination. –

+1

Je voudrais modifier la signature draw() pour recevoir le dessin suivant (ostream & tt = std :: cout) 'si aucun ostream n'est donné, il imprimera sur la console –

Répondre

0

En supposant que la fonction draw() utilise stdout (par exemple Cout), vous pouvez simplement exécuter

freopen("my.txt","w",stdout); 

avant d'appeler tirage au sort.

+0

Mais j'appelle toujours 'draw' en utilisant' aid'? – Medvednic

+0

Cela fonctionne! Je suis vraiment surpris. devrais-je supprimer la ligne 'fstream fs (" data.txt ", std :: ios :: out);' qui se trouve au début du bloc? et ne laisser que le "freopen"? – Medvednic

+0

Le seul problème est que, après l'écriture dans le fichier, le programme attend l'entrée de l'utilisateur, même si je saisis un caractère, il attend toujours un, pourquoi? – Medvednic

Questions connexes