C++输出格式控制

对于流数据的输入输出格式,C++提供了两种不同的控制方式,一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“”、“”以及流格式控制对象进行设置。本文只介绍:用函数设置或者恢复格式 大部分流的输入输出格式对于流数据的输入输出格式,C++提供了两种不同的控制方式,一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“<<”、“>>”以及流格式控制对象进行设置。
  本文只介绍:用函数设置或者恢复格式
  大部分流的输入输出格式可以用setf函数来设置。该函数有两种重载形式。其但参数的setf原型为:
  fmtflage setf(fmtfalg flag)
  参数flag说明所要设置的格式,由ios_base给出,可取如下枚举常量:
  enum{
  left =0x0001, //在域中靠左输出
  right =0x0002, //在域中靠右输出
  internal =0x0004, //符号靠左数值靠右输出,中间默认以空格填充
  dec =0x0008, //数值以十进制输出
  hex =0x0010, //以16进制输出
  oct =0x0020, //8进制输出
  fixed =0x0040, //浮点数以小数方式输出
  scientific =0x0080, //浮点数以科学计数方式输出
  boolalpha =0x0100, //布尔值以true/false方式输出
  showbase =0x0200, //8进制前面加0做指示符,16进制前面加0x做指示符
  showpoint =0x0400, //不管小数点和尾部的0是否可省略不写,都输出小数点和0
  showpos =0x0800, //在正数前面输出+号
  skipws =0x1000, //不读入空白字符(空格,制表符\t,回车\r,和换行\n)
  unitbuf =0x2000, //每次写入数据都刷新到相应设备
  uppercase =0x4000, //科学计数法的”e”和16进制计数的”x”,大写输出为”E”和”X”
  adjustfield =left | right | internal, //一般用作对齐方式的屏蔽码
  basefield =dec | hex | oct, //一般用作数值进制输出方式的屏蔽码
  floatfield =scientific | fixed //一般用作浮点数输出方式的屏蔽码
  };
  一般用派生类ios作前缀”ios::”使用以上枚举值.
  Setf函数的另一个使用原型如下:
  Fmtflags setf(fmtflags flag,fmtflags mask)
  其中第二个函数mask为隐码格式.例如设置adjustfield,basefield和floatfield格式.组成隐码格式的所有格式会首先被复位,然后用第一个参数flag去设置新格式.
  对于setf函数设置的格式,可用unsetf函数进行复位.下面是他的原型,参数mask为所要复位的格式.
  Void unsetf(fmtflags mask)
  下面程序使用setf/unsetf函数对内建的cout流进行格式设置和复位.
 

 #include <iostream>
  using namespace std;
  int main(void)
  {
  //科学计数方式显示,大写E
  cout.setf(ios::scientific | ios::uppercase);
  cout<<2006.5<<endl;            //输出2.0065E+03
  //下面的showpos不起作用,不会显示出"+"号
  cout.setf(ios::floatfield,ios::fixed | ios::showpos);
  cout<<2006.5<<endl;            //输出2006.5
  //显示"+"号
  cout.setf(ios::showpos);
  cout<<2006.5<<endl;            //输出+2006.5
  return 0;
  }

  对于流的其他格式,如输出的最小宽域、数值精度以及填充字符的格式设置,可以使用ios_base类提供的width和precision函数,以及ios类提供的fill函数.
  Width函数用newwidth设置新的最小域宽,如果输出不足以占满整个域,会补充适当的前导空格或者前导0.
  Streamsize width(streamsize newwidth)
  默认的数值精度为6位有效数字,可用precision函数将参数newprecision设置为新的精度值,数值输出时会按这个精度进行必要的四舍五入.
  Streamsize precision(streamsize newprecision)
  默认的填充字符为空格字符,可以用fill函数将参数fill_char字符设置为填充字符
  Char_type fill(char_type fill_char)
  下面示例程序对cout流进行了域宽、精度和填充字符等流格式进行了设置。
  

#include <iostream>
  using namespace std;
  int main(void)
  {
  cout.width(20);
  cout<<"hello"<<endl;        //右对齐输出hello,占20字符
  cout.precision(4);
  cout<<2009.228<<endl;        //输出2009
  cout.precision(5);
  cout<<2009.228<<endl;        //输出2009.2
  cout.precision(7);
  cout<<2009.228<<endl;        //输出2009.228
  cout.width(20);
  cout.fill('*');
  cout<<"baby"<<endl;            //输出"****************baby"
  return 0;
  
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页