我有以下工作代码,它使用 ofstream 生成格式化输出,但是我觉得所有重复的格式说明符都很难阅读。有什么方法可以永久设置给定流的精度、宽度和对齐方式,这样可以很好地清理一切吗?
#include <fstream>
#include <iomanip>
ofstream myfile;
myfile.open(Output.c_str(), ios::trunc);
for (int i = 0; i < iLen; i++) {
myfile <<std::fixed << std::setw( iWidth ) << std::setprecision( iDecimals )<< std::right << pDist[i] << " "
<<std::fixed << std::setw( iWidth ) << std::setprecision( iDecimals )<< std::right << pRes[i] << " "
<<std::fixed << std::setw( iWidth ) << std::setprecision( iDecimals )<< std::right << pPhase[i] << "\n";
}
myfile.close();
最佳答案
std::fixed
、std::setprecision
和 std::right
都是“永久的”。他们在流对象上设置持久标志。
你每次需要放置的唯一一个是setw
,它(据我了解)不会在流 object 上设置一个标志,只是添加一个特定的通过改变流本身的空白量。但它不影响流。
这类似于 endl
,它对流进行操作,但单独保留实际的流对象。
This answer @LokiAstari 在一个类似的问题上详细说明了哪些说明符,正如他们所说的那样,是“粘性的”(以及为什么)。
编辑:清除了流对象和实际流之间的区别
关于c++ - 如何删除格式化 ofstream 中的冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613822/