当前位置:编程学习 > C/C++ >>

C语言中有输出格式控制,C++怎么实现?

说得最好多一些,详细一些,谢谢。
追问:什么更好,看我的问题。
答案:1、c++中也可以用printf格式输出。

2、包含了 iomanip头文件,cout也能格式输出。

具体看:

#include <iomanip>
  这里面iomanip的作用比较多:
  主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:

dec 置基数为10 相当于"%d"

hex 置基数为16 相当于"%X"

oct 置基数为8 相当于"%o"      //作用永久

sample:

cout<<12<<hex<<12<<oct<<12<<12;output 12c1414

setprecision(n) 设显示小数精度为n位 //作用永久

sample:

setf(ios:fixed);

cout<<setprecision(2)<<2.345<<endl; ouput 2.34 //注意先用setf(ios::fixed);否则结果自己测试下
       

setw(n) 设域宽为n个字符 //作用临时
  这个控制符的意思是保证输出宽度为n。如:
  cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100; 输出结果为
  1 10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。

setfill(c) 设填充字符为c

  setioflags(ios::fixed) 固定的浮点显示
  setioflags(ios::scientific) 指数表示  

sample cout<<setiosflags(ios::fixed)<<setprecision(2)<<2.345<<endl; output 2.34
  setiosflags(ios::left) 左对齐
  setiosflags(ios::right) 右对齐
  setiosflags(ios::skipws) 忽略前导空白
  setiosflags(ios::uppercase) 16进制数大写输出
  setiosflags(ios::lowercase) 16进制小写输出
  setiosflags(ios::showpoint) 强制显示小数点
  setiosflags(ios::showpos) 强制显示符号

sample: cout<<setiosflags(ios::uppercase)<<hex<<12<<15<<endl; output CF

cout<<setioflags(ios::showpoint)<<x<<endl;若float x=1,则output 1.000000 不使用直接输出1

cout<<setiosflags(ios::showpos)<<1<<endl;output +1

 

 

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

  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

  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;

  }

c++ 用 iomainip 库文件 ,包括精度之类的输出控制格式 。

 

http://www.zzzyk.com/lucyjiayou/archive/2012/01/05/2312684.html

这是那个库文件一些函数的说明。

上一个:c++怎么学啊 (具体点)求求了
下一个:c++问题,求高手解答..........分少见谅。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,