• 格式化输出[part1/标准控制符]


    /*

    设置输出字符的宽度
    width(int)是iostream类的成员函数,可以通过cout对象来调用,即cout.width(int)
    注:

    1.width(int)只影响将要显示的一个对象,之后字段宽度会自动恢复为默认值
    2.如果设定的字段宽度小于要输出的字符的宽度,则字符全部输出
    3.如果设定的字段宽度大于要输出的字符的宽度,则字符右对齐输出,多余部分用空格填充

    设置填充字段
    cout.fill(char)可以设置填充字段
    注:fill(char)会一直生效,直至重新设置

    设置浮点数的显示精度
    cout.precision(int)可以设置浮点数的显示精度(不包括小数点)
    注:

    1.如果设置的精度大于浮点数的位数,如果浮点数能根据IEEE754精确表示,则补零;如果浮点数不能精确表示,则尽量接近
    2.如果设置的精度小于浮点数的位数,采用科学计数法表示

    3.precision(int)单独使用,表示设置有效位数;与fixed或者scientific连用,表示设置小数位的精度
    4.precision(int)会一直生效 

    setf()函数

    setf()函数原型如下:
    fmtflags setf(fmtflags)
    fmtflags setf(fmtflags,fmtflags)
    先看第一个原型。
    其中fmtflags是一种标志类型,或者说标志位。
    ios_base类的保护数据成员是一个15位的二进制数字,或者说是15个标志位,这15个标志位与ios类的15个枚举型常量一一对应,对应关系如下:
    boolalpha    fixed    scientific    hex    oct    dec    internal    right    left    showpos    showpoint    showbase
    0         0      0        0     0     1        0         0      0     0            0         0 
    uppercase   unitbuf   skipws
    0         0      1
    即ios类的15个枚举型常量与ios_base类的15位二进制数字000 0010 0000 0001一一对应。另外,可以看到,二进制数字的15位除了skipws和dec对应的位数默认为1之外,其他均默认为0 (注:上表是VC++的对应关系)
    15个标志的含义如下所示:
    ios::boolalpha    bool型数值的输入和输出使用文本形式(即true或false)
    ios::fixed        定点格式输出,即以小数点的形式表示浮点数
    ios::scientific      用科学记数法表示浮点数
    ios::hex          采用十六进制
    ios::oct          采用八进制
    ios::dec         采用十进制
    ios::internal        输出格式为居中对齐
    ios::right             输出格式为右对齐
    ios::left          输出格式为左对齐
    ios::showpos        在正数前面加上+号
    ios::showpoint     显示末尾的0和小数点
    ios::showbase      显示进制,即在十六进制数前添加0x,在八进制数前添加0
    ios::uppercase     大写显示
    ios::unitbuf     每次执行输出操作后均会清空缓冲区
    ios::skipws      忽略输入流中的空白字符,即当我们输入的字符前面有空格时,存储的时候会自动忽略
    注:
    1.设置多个标志位用"|"隔开
    2.默认对齐方式为右对齐
    3.setf(ios::showpoint)与precision连用时,会输出小数点(单独的precision不会输出小数点)
    4.ios::internal输出格式为居中对齐,其中符号左对齐,值右对齐;如果是十六进制,则前缀0x左对齐
    5.ios::uppercase只对十六进制起作用,即将0x变为0X
    6.ios::fixed或ios::scientific与ios::presicion连用表示的是小数位数,而不是有效位数
    7.以上15个枚举型常量称之为标准控制符

    下面看setf()的第二种原型,即:
    fmtflags setf(fmtflags,fmtflags)
    其中第一个参数是要开启的标志位,第二个参数是要清除的标志位,标志位的清除通过指示标志位来实现
    指示标志位共有三个,如下:
    ios::basefield 指示相关标志位:dec、oct、hex
    ios::adjustfield 指示相关标志位:left、right、internal
    ios::floatfield 指示相关标志位:fixed、scientific
    其实现原理是15个标志位中只有要清除的标志位为1,其余位为0,然后取反后与15个标志位进行与操作
    另外,指示标志位也是ios类从ios_base类中继承而来,因此ios::adjustfield等效于ios_base::adjustfield
    注:清除多个标志位用"|"隔开

    清除标志位
    unsetf()函数可以实现标志位的清除

    注:unsetf()实现原理同指示标志位是一样的,都是15个标志位中只有要清除的标志位为1,其余位为0,然后取反后与15个标志位进行与操作

    */

    #include <iostream>
    using namespace std;
    int main()
    {
        const float number=-185.12f;
        cout.width(10);
        cout.setf(ios::left);
        cout<<number<<endl;   //-185.12
        cout.width(10);
        cout.setf(ios::right,ios::adjustfield);
        cout<<number<<endl;   // -185.12
        cout.width(10);
        cout.setf(ios::internal,ios::adjustfield);
        cout<<number<<endl;   //- 185.12
        return 0;
    }
  • 相关阅读:
    学习笔记2
    带有循环的存储过程
    经典SQL语句大全
    关于职业的一些看法
    把dataTable表批量的写入数据库
    抽奖接口,每天只能抽奖3次,而且必须先登录才能抽奖的小程序
    调用获取学生信息的接口,保存到excel里面的小程序
    内置函数补充
    好用的模块
    网络编程
  • 原文地址:https://www.cnblogs.com/kevinq/p/4491832.html
Copyright © 2020-2023  润新知