c++ - 如何删除格式化 ofstream 中的冗余

标签 c++ c++98

我有以下工作代码,它使用 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::fixedstd::setprecisionstd::right 都是“永久的”。他们在流对象上设置持久标志。

你每次需要放置的唯一一个是setw,它(据我了解)不会在流 object 上设置一个标志,只是添加一个特定的通过改变流本身的空白量。但它不影响流。

这类似于 endl,它对流进行操作,但单独保留实际的流对象。

This answer @LokiAstari 在一个类似的问题上详细说明了哪些说明符,正如他们所说的那样,是“粘性的”(以及为什么)。

编辑:清除了流对象和实际流之间的区别

关于c++ - 如何删除格式化 ofstream 中的冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613822/

相关文章:

c++ - CPP : Using UTF-8 in cURL

c++ - C++-使用泰勒级数逼近估算cos(x)

C++:避免​​重复符号链接(symbolic link)器错误

c++ - boost 随机生成器返回相同的值

c++ - (a=1)=2 在 C++98 中是未定义的行为吗?

c++ - 任何人都可以像字符一样解释- 'a'

c++ - C++中实现List时在何处声明Node结构

c++ - 尝试随机播放 std::vector 时出错

c++ - 如何循环异构类的实例以调用具有相同名称和参数的方法?

c++ - 旧版C++版本中struct和class之间的区别