zoukankan      html  css  js  c++  java
  • 输出流格式化(以操纵子方式格式化,以ios类成员函数方式格式化)

    一、以操纵子方式格式化

    数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符。把它们作为插入操作符<<的输出对象即可。如setiosflags、setw、setfill、setprecision、hex、oct等。

    (一)、常用的流操纵算子:



    (二)、ios类的枚举常量


     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #include <iostream>
    #include <iomanip>

    using namespace std;

    // 通过操纵子方式进行格式化输出
    // 宽度控制
    // 对齐控制
    // 填充控制
    // 精度控制
    // 进制输出
    int main(void)
    {
        //system("chcp 936");
        int n = 64;
        double d = 123.45;
        double d2 = 0.0187;

        cout << "=================宽度控制=====================" << endl;
        cout << n << '#' << endl;
        cout << setw(10) << n << '#' << n << endl;      // 宽度控制不会影响下一个输出

        cout << "=================对齐控制=====================" << endl;
        cout << setw(10) << setiosflags(ios::left) << n << '#' << endl;
        cout << setw(10) << n << '#' << endl;           // 对齐控制会影响下一个输出
        //cout<<setw(10)<<setiosflags(ios::right)<<n<<'#'<<endl;
        cout << setw(10) << resetiosflags(ios::left) << n << '#' << endl; //去除左对齐

        cout << "=================填充控制=====================" << endl;
        cout << setw(10) << setfill('?') << n << '#' << endl;
        cout << setw(10) << n << '#' << endl;           // 填充控制会影响下一个输出
        cout << setw(10) << setfill(' ') << n << '#' << endl;

        cout << "=================精度控制=====================" << endl;
        cout << setprecision(4) << d << endl; //有效数字
        cout << setprecision(2) << d2 << endl;

        cout << setiosflags(ios::fixed);
        cout << setprecision(4) << d << endl; // 小数点后面位数
        cout << setprecision(2) << d2 << endl;

        cout << "=================进制输出=====================" << endl;

        cout << n << endl;
        cout << oct << n << endl;
        cout << hex << n << endl;
        cout << endl;

        cout << setiosflags(ios::showbase); //八进制加前缀0,十六进制加前缀0x
        cout << dec << n << endl;
        cout << oct << n << endl;
        cout << hex << n << endl;

        cout << endl;
        cout << setbase(10) << n << endl; //八进制加前缀0,十六进制加前缀0x
        cout << setbase(8) << n << endl;
        cout << setbase(16) << n << endl;

        return 0;
    }



    二、以类成员函数方式格式化

    通过调用流的成员函数控制格式,如setf、unsetf、width、fill、precision等。优点是在设置格式同时,可以返回以前的设置,便于恢复原来的设置。

    ios类提供成员函数对流的状态进行检测和进行输入输出格式控制等操作:



     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <iostream>
    //#include <iomanip>

    using namespace std;

    // 通过成员函数方式进行格式化输出
    // 宽度控制
    // 对齐控制
    // 填充控制
    // 精度控制
    // 进制输出
    int main(void)
    {
        //system("chcp 936");
        int n = 64;
        double d = 123.45;
        double d2 = 0.0187;

        cout << "=================宽度控制=====================" << endl;
        cout << n << '#' << endl;
        cout.width(10);
        cout << n << '#' << n << endl;                  // 宽度控制不会影响下一个输出

        cout << "=================对齐控制=====================" << endl;
        cout.width(10);
        cout.setf(ios::left);
        cout << n << '#' << endl;
        cout.width(10);
        cout << n << '#' << endl;               // 对齐控制会影响下一个输出
        //cout.width(10);
        //cout.setf(ios::right);
        //cout<<n<<'#'<<endl;

        cout.width(10);
        cout.unsetf(ios::left);
        cout << n << '#' << endl;

        cout << "=================填充控制=====================" << endl;
        cout.width(10);
        cout.fill('?');
        cout << n << '#' << endl;

        cout.width(10);
        cout << n << '#' << endl;               // 填充控制会影响下一个输出

        cout.width(10);
        cout.fill(' ');
        cout << n << '#' << endl;

        cout << "=================精度控制=====================" << endl;
        cout.precision(4);
        cout << d << endl;
        cout.precision(2);
        cout << d2 << endl;

        cout.setf(ios::fixed);
        cout.precision(4);
        cout << d << endl;
        cout.precision(2);
        cout << d2 << endl;;

        cout << "=================进制输出=====================" << endl;

        cout.setf(ios::showbase);
        cout << n << endl;
        cout.unsetf(ios::dec);
        cout.setf(ios::oct);
        cout << n << endl;

        cout.unsetf(ios::oct);
        cout.setf(ios::hex);
        cout << n << endl;

        return 0;
    }



    参考:

    C++ primer 第四版
    Effective C++ 3rd
    C++编程规范

  • 相关阅读:
    用javascript获取屏幕高度和宽度等信息
    Delphi程序启动参数的读取
    在CSS中使用javascript运算表达式
    How to check an Internet connection
    CheckMenuItem Function in Delphi
    在delphi中添加一个菜单项到Windows的系统菜单
    Delphi中直接将DataSet中的数据写入Excel文件
    带有TClientDataSet的delphi应用程序在发布时应注意的问题
    Delphi下一个封装较为完整的DBGrid>Excel类
    how to advertent to connect to internet?
  • 原文地址:https://www.cnblogs.com/alantu2018/p/8471159.html
Copyright © 2011-2022 走看看