2011-03-18 92 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上执行此操作。

相关问题