为什么我的输出转到cout而不是文件?

时间:2011-03-18 15:10:49

标签: c++ c file-io string-formatting

我在一个有队列的系统上做一些科学工作。在提交到队列时,cout将输出到日志文件,其名称使用命令行选项指定。但是,我还想要一个单独的输出到文件,我实现如下:

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

然而它与输出到cout混合在一起,我只在我的potential.txt中得到一些神秘的重复数字。这是缓冲问题吗?输出到其他文件的其他实例工作......也许我应该将这一个移出一个cout重的区域?

3 个答案:

答案 0 :(得分:6)

您要在vout中发送printf返回的值,而不是字符串。

你应该这样做:

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

答案 1 :(得分:2)

你将C和C ++混合在一起。

printf是来自c库的函数,它将格式化字符串打印到标准输出。 ofstream及其<<运算符是您使用C ++样式打印文件的方式。

这里有两个选项,你可以用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;

答案 2 :(得分:0)

如果这是在* nix系统上,您只需编写程序将其输出发送到stdout,然后使用管道和tee命令将输出定向到一个或多个文件。 e.g。

$ command parameters | tee outfile

将导致命令的输出被写入outfile以及控制台。

如果安装了适当的工具(例如GnuWin32),也可以在Windows上执行此操作。