2010-08-23 12 views
15

Piszę program i chcę, aby użytkownik mógł określić, czy dane wyjściowe są zapisywane do pliku, czy do standardowego. Do tego momentu mój program korzystał z poleceń printf, więc miałem nadzieję, że po prostu zmienię polecenia na polecenia fprintf, ale mój kompilator krzyczy na mnie, ponieważ oczywiście nie są to te same klasy obiektów.C++ FILE wskaźnik na standardowe wyjście?

Na przykład:

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()); 

Wolałbym trzymać fprintf i znaleźć wskaźnik pliku na standardowe wyjście, czy ktoś wie, czy to możliwe? Jeśli odpowiedź brzmi "nie", czy mogę otworzyć moje pliki jako pliki fstream, a następnie użyć fprintf?

+0

Oczywiście w idiomatycznym C++ używałbyś 'ostream &", który odwołuje się do 'std :: cout' lub' std :: ofstream' – MSalters

Odpowiedz

35

stdout jest FILE*, więc można po prostu użyć:

FILE* fp = stdout; 
+1

Dzięki! Pracował jak urok :) – Mitch

7

Wystarczy upuścić ampersanda: fp = stdout;.

Powiązane problemy