Почему мой вывод идет в cout, а не в файл? - PullRequest
4 голосов
/ 18 марта 2011

Я занимаюсь научной работой в системе с очередью. Cout получает выходные данные в файл журнала с именем, указанным в параметрах командной строки при отправке в очередь. Однако я также хочу отдельный вывод в файл, который я реализую так:

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

Однако он смешивается с выводом, идущим в cout, и я получаю только некоторые загадочные повторяющиеся числа в моем потенциальном. Тексте. Это проблема с буфером? Другие экземпляры вывода в другие файлы работают ... может быть, мне следует убрать его из области, которая слишком тяжелая?

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Вы отправляете значение, возвращаемое printf в vout, а не в строку.

Вы должны просто сделать:

vout << Rf*BohrToA << " " << eval(0)*hatocm << "\n";
2 голосов
/ 18 марта 2011

Вы смешиваете ваши 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;
0 голосов
/ 18 марта 2011

Если это система * nix, вы можете просто написать свою программу для отправки ее вывода на стандартный вывод, а затем использовать трубу и команду tee, чтобы направить вывод также в один или несколько файлов.например,

$ command parameters | tee outfile

приведет к тому, что вывод команды будет записан как в файл, так и в консоль.

Вы также можете сделать это в Windows, если у вас установлены соответствующие инструменты (такие какGnuWin32).

...