我在一个有队列的系统上做一些科学工作。在提交到队列时,cout将输出到日志文件,其名称使用命令行选项指定。但是,我还想要一个单独的输出到文件,我实现如下:
ofstream vout("potential.txt"); ...
vout<<printf("%.3f %.5f\n",Rf*BohrToA,eval(0)*hatocm);
然而它与输出到cout混合在一起,我只在我的potential.txt中得到一些神秘的重复数字。这是缓冲问题吗?输出到其他文件的其他实例工作......也许我应该将这一个移出一个cout重的区域?
答案 0 :(得分:6)
答案 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上执行此操作。