在线客服
在线客服系统
 2011招生简章 |  高中生专区 | 自考生专区 | 大学生专区 | 白领专区

C++输出格式控制

点击数: 更新时间:2010-05-26 16:50:42
 

对于流数据的输入输出格式,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;

  }

【责编:coco】


上一篇:c#文件操作 [ 05-26 ]下一篇:Java sum传递如何完成成员变量 [ 05-26 ]

友情提示:如果您对北大青鸟的学费、课程、就业有任何疑问,可以拨打免费 4006-010-802 和我们沟通!

相关信息
没有相关内容
开班信息

日期 班级 类型 余座
4月29日 S1151 脱产班 9
4月15日 S1150 脱产班 3
3月30日 S1149 脱产班 已满
3月22日 S1148 脱产班 已满
3月20日 S1146 脱产班 已满
3月15日 S1144 脱产班 已满
3月11日 S1143 脱产班 已满
2月19日 S1142 脱产班 已满

 

免费试听
讲座时间: 2011年4月16日
讲座地点:
阜成门校区第二教室
讲座内容: 揭秘木马
主讲老师: 杨校长
讲师介绍: 计算机专业,10年软件开发与培训经验,任中软集团项目经理;独立设计和负责多个大型企业应用,有丰富实践经验并精通北大青鸟ACCP教学培训体系。
咨询电话: 010-68351302
订座电话: 010-68351303

 

©Copyright2004 - 2009 www.bjaccp.com, All Rights Reserved
版权所有2004-2008 北大青鸟APTECH( 北京佳音旗舰 ) 授权培训中心
地址:北京西城区北礼士路100号( 阜成门华联商厦西门北侧北走50米)100037北大青鸟地址
京ICP备06064589号
51.la