2010-08-23 19 views
15

Estoy escribiendo un programa y quiero que el usuario pueda especificar si la salida se escribe en un archivo o en stdout. Hasta este punto, mi programa ha estado usando comandos printf, así que esperaba simplemente cambiar los comandos a comandos fprintf, pero mi compilador me grita porque obviamente no son las mismas clases de objetos.C++ Indicador FILE a stdout?

Por ejemplo:

FILE *fp; 
bool print_to_file; 
. 
. 
. 
if(print_to_file){ 
    fp = fopen("something.txt", "w"); 
} 
else{ 
    fp = &stdout; 
} 
fprintf(fp,"%s\t%s\t%s\n",string1 . c_str(), string2 . c_str(), string3 . c_str()); 

preferiría seguir con fprintf y encontrar un apuntador de archivo a la salida estándar, ¿alguien sabe si eso es posible? Si la respuesta es no, ¿puedo abrir mis archivos como fstreams y luego usar fprintf?

+0

Por supuesto, en C++ idiomático usaría un 'ostream &' que hace referencia a 'std :: cout' o' std :: ofstream' – MSalters

Respuesta

35

stdout es una FILE*, por lo que simplemente puede utilizar:

FILE* fp = stdout; 
+1

¡Gracias! Trabajado como un encanto :) – Mitch

7

tan sólo reduce el símbolo de unión: fp = stdout;.