2011-03-18 105 views
4

我正在做一些有關隊列的系統的科學工作。提交到隊列時,cout將輸出輸出到名稱由命令行選項指定的日誌文件。不過,我也希望有一個單獨的輸出到文件,這是我實現這樣的:爲什麼我的輸出轉到cout而不是文件?

ofstream vout("potential.txt"); ... 
vout<<printf("%.3f %.5f\n",Rf*BohrToA,eval(0)*hatocm); 

但是它被與輸出去清點我只在我的potential.txt得到一些神祕的重複數混合。這是一個緩衝區問題嗎?其他情況下輸出到其他文件的工作...也許我應該把這一個從一個很重的區域移開?

回答

2

您正在將C和C++混合在一起。

printf是一個從c庫中打印格式化字符串到標準輸出的函數。 ofstream及其<<運算符是如何以C++風格打印到文件的。

你有兩個選擇,你可以打印出C方式或C++方式。

風格:

FILE* vout = fopen("potential.txt", "w"); 
fprintf(vout, "%.3f %.5f\n",Rf*BohrToA,eval(0)*hatocm); 

C++風格:

#include <iomanip> 
//... 
ofstream vout("potential.txt"); 
vout << fixed << setprecision(3) << (Rf*BohrToA) << " "; 
vout << setprecision(5) << (eval(0)*hatocm) << endl; 
+0

謝謝。其實我沒有接受任何C/C++的正式培訓,但是我正在做一個RA的小組使用它們。因此,他們一直在破解以前的工作代碼,並使用cplusplus.com教程作爲參考。 – ntype 2011-03-18 15:44:01

6

您發送的是由vout中的printf返回的值,而不是字符串。

你應該簡單地做:

vout << Rf*BohrToA << " " << eval(0)*hatocm << "\n"; 
+0

確定感謝,但有關格式化輸出什麼?使用sprintf格式化爲一個字符串並輸出它? – ntype 2011-03-18 15:17:29

+0

@ntype您正在使用C++,因此您可以使用操縱器來幫助您設置字符串格式:http://www.cprogramming.com/tutorial/iomanip.html – razlebe 2011-03-18 15:23:10

+0

@ntype - 有關完整的printf樣式格式,請參見http:// www.boost.org/doc/libs/1_46_1/libs/format/爲簡單的精度(),寬度()等你可以使用ostream中的函數 – 2011-03-18 15:28:12

0

如果這是Unix和Linux系統上,你可以簡單地編寫程序傳送其輸出到標準輸出,然後使用管道和tee命令來直接輸出以及一個或多個文件。例如

$ command parameters | tee outfile 

將導致命令的輸出寫入outfile以及控制檯。

如果您安裝了適當的工具(如GnuWin32),您也可以在Windows上執行此操作。

相關問題