• C++输入输出流格式控制(转)


    转自“http://www.cnblogs.com/lucyjiayou/archive/2012/01/05/2312684.html”

    使用这些格式需要声明包含<iomainip>

    long flags( ) const 返回当前的格式标志。 
    long flays(long newflag) 设置格式标志为newflag,返回旧的格式标志。 
    long setf(long bits) 设置指定的格式标志位,返回旧的格式标志。 
    long setf(long bits,long field)将field指定的格式标志位置为bits,返回旧的格式标志 
    long unsetf(long bits) 清除bits指定的格式标志位,返回旧的格式标志。 
    long fill(char c) 设置填充字符,缺省条件下是空格。 
    char fill( ) 返回当前填充字符。 
    int precision(int val) 设置精确度为val,控制输出浮点数的有效位,返回旧值。 
    int precision( ) 返回旧的精确度值。 
    int width(int val) 设置显示数据的宽度(域宽),返回旧的域宽。 
    int width( )只返回当前域宽,缺省宽度为0。这时插入操作能按表示数据的最小宽度显示数据 
    dec 十进制的输入输出 
    hex 十六进制的输入输出 
    oct 八进制的输入输出 
    ws 提取空白字符 
    flush 刷新流 
    resetiosflags(long) 请除特定的格式标志位 
    setiosflags(long) 设置特定的格式标志位 
    setfill(char) 设置填充字符 
    setprecision(int) 设置输出浮点数的精确度 
    setw(int) 设置域宽格式变量

    C++输入输出流格式控制

    1.使用控制符控制输出格式

    控制符 作用
    dec 设置整数的基数为10
    hex 设置整数的基数为16
    oct 设置 整数的基数为8
    setbase(n) 设置整数的基数为n(n只能是16,10,8之一)
    setfill(c) 设置填充字符c,c可以是字符常量或字符变量
    setprecision(n) 设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位 数)形式和scientific(指数)形式输出时,n为小数位数。
    setw(n) 设置字段宽度为n位。
    setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示。
    setiosflags(ios::scientific) 设置浮点数以科学计数法(即指数形式)显示。
    setiosflags(ios::left) 输出数据左对齐。
    setiosflags(ios::right) 输出数据右对齐。
    setiosflags(ios::shipws) 忽略前导的空格。
    setiosflags(ios::uppercase) 在以科学计数法输出E和十六进制输出字母X时,以大写表示。
    setiosflags(ios::showpos) 输出正数时,给出“+”号。
    resetiosflags 终止已设置的输出格式状态,在括号中应指定内容。

    2.用流对象的 成员控制输出格式

    流成员函数 与之作用相同的控制符 作用
    precision(n) setprecision(n) 设置实 数的精度为n位。
    width(n) setw(n) 设置字段宽度为n位。
    fill(c) setfill(c) 设置填充字符c。
    setf( ) setiosflags( ) 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。
    ubsetf( ) resetiosflags( ) 终止已设置的输出格式状态。

    cout.width(10); 

    cout.setf(ios::hex);

    3.设置格式状态的格式标志

    格式标志 作用
    ios::left 输出数据在本域宽范 围内左对齐
    ios::right 输出数据在本域宽范围内右对齐
    ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
    ios::dec 设置整数的基数为10
    ios::oct 设置整数的基数为8
    ios::hex 设置整数的基数为16
    ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头)
    ios::showpoint 强制输出浮点数的小点和尾数0
    ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示
    ios::showpos 输出正数时,给出“+”号。
    ios::scientific 设置浮点数以科学计数法(即指数形式)显示
    ios::fixed 设置浮点数以固定的小数位数显示
    ios::unitbuf 每次输出后刷新所有流
    ios::stdio 每次输出后清除 stdout,stderr

    以小数形式,保留三位小数输出: 

    cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;

    C++输出流的格式控制setw()、setfill()、setbase()、setprecision()、tellp...

    inline SMANIP(long)     resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
    inline SMANIP(int)      setfill(int _m) {return SMANIP(int)(__setfill, _m); }
    inline SMANIP(long)     setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
    inline SMANIP(int)      setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
    inline SMANIP(int)      setw(int _w) { return SMANIP(int)(__setw, _w); }

    //他们都是inline 内联函数

    (1)setw(int n) 预设输出宽度

    如:cout<<setw(6)<<123<<endl;

    输出结果为“   123”,在123的前面会有3个空格,123右对齐。 

    (2)setfill(char c) 预设填充字符

    如:cout<<setfill(‘#’)<<123<<endl;

    输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。

    (3)setbase(int n) 预设整数输出进制

    如:cout<<setbase(8)<<255<<endl; 

    输出显示结果为377

    (4)setprecision(int n) 用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。示例程序如下:

    #include <iostream.h>

    #include <iomanip.h> //格式控制

    void main()

    {

        double amount = 22.0/7;

        cout <<amount <<endl; //(1)

        cout <<setprecision(0) <<amount <<endl   //(2)

           <<setprecision(1) <<amount <<endl     //(3)

           <<setprecision(2) <<amount <<endl     //(4)

           <<setprecision(3) <<amount <<endl     //(5)

           <<setprecision(4) <<amount <<endl;    //(6)

        cout <<setiosflags(ios::fixed);

        cout <<setprecision(8) <<amount <<endl; //(7)

        cout <<setiosflags(ios::scientific)<<amount<<endl; //(8)   

        cout <<setprecision(6);

    }

    第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待:第3~6行输出按设置的有效位数输出。 第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。 第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。在用指数形式输出时,setprecision(n)表示小数位数。 (可是这个指数形式的输出我用VC6没有运行出来)。

    setw(int _w)讲解
    << setw(int _w) << 输出位宽
    如<< setw(7) << 1000   输出结果为 "1000   "(紧跟三个空格)
    而如<< setw(3) << 1000 位宽小于原来的数字的位宽 那么按照原来的格式输出"1000" 前后无空格

    setfill() 讲解
    setfill(int _m) 随setw(int _w)一起使用 意思是在set(int _w)设定后的空格填充指定的字符
    注意setfill里边的参数是int _m 是个整数 所以 如果我们要用空格来填充*号的时候
    要使用setfill('*')[字符] 而不是setfill(*)

    C++中tellp()函数与tellg()函数
    tellp()函数用来获取“输出指针”的当前位置(从文件首到当前位置的字节数);
    tellg()函数用来获取“读入指针”的当前位置(从文件首到当前位置的字节数)。

  • 相关阅读:
    [算法][递归]求阶乘
    [数据结构]ArrayStack
    [数据结构]Graph
    [数据结构]TrieTree
    [数据结构]UnionFindSet
    [算法]在数组中找到一个局部最小位置
    在二叉树中找到一个节点的后继节点
    [算法]折纸问题
    常用下载方式的区别-BT下载、磁力链接、电驴
    纯文本-FileOutputStream的解码方式
  • 原文地址:https://www.cnblogs.com/ftrako/p/3422374.html
Copyright © 2020-2023  润新知