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


    在输出浮点数时,C++默认的流输出数值有效位是6,所以不管数据是多少都只输出六位有效数字。可以采用setprecision(n)来控制输出流显示浮点数的数字个数。

    I/O流常用控制符:

    使用控制符时,需要加入头文件#include<iomanip>。C++有两种方法控制格式输出:1、用格式控制符;2、用流对象的成员函数。

    使用格式控制符:

    控制符 作用
    dec 设置整数的基数为10
    hex 设置整数的基数为16
    oct 设置整数的基数为8
    setbase(n) 设置整数的基数为n,其中n的取值为8,10,16
    setfill(c) 设置填充字符,c可以是字符常量或字符变量
    setprecision(n) 设置实数的精度为n位。在以一般十进制形式输出时,n代表有效数字。在以fixed(固定小数位)形式和scientific(指数)形式输出时,n为小数位数。
    setw(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 终止已设置的输出格式状态,在括号中应指定内容。

    成员函数:

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

    dec 置基数为10 相当于"%d";hex 置基数为16 相当于"%X";oct 置基数为8 相当于"%o"。

    设置格式状态的格式标志:

    格式标志 作用
    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

    测试1:一个按进制输出的例子(成员函数实现)

    int x=30, y=300, z=1024;
    cout<<x<<' '<<y<<' '<<z<<endl; //按十进制输出
    cout.setf(ios::showbase | ios::uppercase); //设置基指示符输出和数值中的字母大写输出
    cout<<x<<' '<<y<<' '<<z<<endl;
    cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符输出和数值中的字母大写输出
    cout.setf(ios::oct); //设置为八进制输出,此设置不取消一直有效
    cout<<x<<' '<<y<<' '<<z<<endl; //按八进制输出
    cout.setf(ios::showbase | ios::uppercase); //设置基指示符输出和数值中的字母大写输出
    cout<<x<<' '<<y<<' '<<z<<endl;
    cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符输出和数值中的字母大写输出
    cout.unsetf(ios::oct); //取消八进制输出设置,恢复按十进制输出
    cout.setf(ios::hex); //设置为十六进制输出
    cout<<x<<' '<<y<<' '<<z<<endl;
    cout.setf(ios::showbase | ios::uppercase); //设置基指示符输出和数值中的字母大写输出
    cout<<x<<' '<<y<<' '<<z<<endl;
    cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符输出和数值中的字母大写输出
    cout.unsetf(ios::hex); //取消十六进制输出设置,恢复按十进制输出
    cout<<x<<' '<<y<<' '<<z<<endl;
    View Code

    测试2:一个按进制输出的例子(操作控制符实现)

    #include<iomanip.h>
    void main()
    {
    int x=30, y=300, z=1024;
    cout<<x<<' '<<y<<' '<<z<<endl; //按十进制输出
    cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八进制输出
    cout<<setiosflags(ios::showbase); //设置基指示符
    cout<<x<<' '<<y<<' '<<z<<endl; //仍按八进制输出
    cout<<resetiosflags(ios::showbase); //取消基指示符
    cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六进制输出
    cout<<setiosflags(ios::showbase | ios::uppercase);
    //设置基指示符和数值中的字母大写输出,
    cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六进制输出
    cout<<resetiosflags(ios::showbase | ios::uppercase);
    //取消基指示符和数值中的字母大写输出
    cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六进制输出
    cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十进制输出
    }
    View Code

    测试3:打印如下格式的一段文字

    第一章

    1.1 什么是C语言...........................1

    1.11 C语言的历史..........................58

    第二章

    #include <iostream.h>
    void main()
    {
    cout<<"第一章"<<endl;
    cout<<" ";
    cout.setf(ios::left); //设置对齐方式为left
    cout.width(7); //设置宽度为7,不足用空格填充
    cout<<"1.1";
    cout<<"什么是C语言";
    cout.unsetf(ios::left); //取消对齐方式,用缺省right方式
    cout.fill('.'); //设置填充方式
    cout.width(30); //设置宽度,只对下条输出有用
    cout<<1<<endl;
    cout<<" ";
    cout.width(7); //设置宽度
    cout.setf(ios::left); //设置对齐方式为left
    cout.fill(' '); //设置填充,缺省为空格
    cout<<"1.11";
    cout<<"C语言的历史";
    cout.unsetf(ios::left); //取消对齐方式
    cout.fill('.');
    cout.width(30);
    cout<<58<<endl;
    cout.fill(' ');
    cout<<"第二章"<<endl;
    }
    View Code
    /*一个使用填充,宽度,对齐方式的例子*/
    #include <iomanip.h>
    void main()
    {
    cout<<"第一章"<<endl;
    cout<<" ";
    cout<<setiosflags(ios::left)<<setw(7); //设置宽度为7,left对齐方式
    cout<<"1.1";
    cout<<"什么是C语言";
    cout<<resetiosflags(ios::left); //取消对齐方式
    cout<<setfill('.')<<setw(30)<<1<<endl; //宽度为30,填充为'.'输出
    cout<<setfill(' '); //恢复填充为空格
    cout<<" ";
    cout<<setw(7)<<setiosflags(ios::left); //设置宽度为7,left对齐方式
    cout<<"1.11";
    cout<<"C语言的历史";
    cout<<resetiosflags(ios::left); //取消对齐方式
    cout<<setfill('.')<<setw(30)<<58<<endl; //宽度为30,填充为'.'输出
    cout<<setfill(' ')<<"第二章"<<endl;
    }
    View Code

    测试4:浮点数的格式(操作控制符实现)

    /*关于浮点数的格式*/
    #include <iostream.h>
    void main()
    {
    float f=2.0/3.0,f1=0.000000001,f2=-9.9;
    cout<<f<<' '<<f1<<' '<<f2<<endl; //正常输出
    cout.setf(ios::showpos); //强制在正数前加+号
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout.unsetf(ios::showpos); //取消正数前加+号
    cout.setf(ios::showpoint); //强制显示小数点后的无效0
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout.unsetf(ios::showpoint); //取消显示小数点后的无效0
    cout.setf(ios::scientific); //科学记数法
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout.unsetf(ios::scientific); //取消科学记数法
    cout.setf(ios::fixed); //按点输出显示
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout.unsetf(ios::fixed); //取消按点输出显示
    cout.precision(18); //精度为18,正常为6
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout.precision(6); //精度恢复为6
    }
    View Code
    #include <iomanip.h>
    void main()
    {
    float f=2.0/3.0,f1=0.000000001,f2=-9.9;
    cout<<f<<' '<<f1<<' '<<f2<<endl; //正常输出
    cout<<setiosflags(ios::showpos); //强制在正数前加+号
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout<<resetiosflags(ios::showpos); //取消正数前加+号
    cout<<setiosflags(ios::showpoint); //强制显示小数点后的无效0
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout<<resetiosflags(ios::showpoint); //取消显示小数点后的无效0
    cout<<setiosflags(ios::scientific); //科学记数法
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout<<resetiosflags(ios::scientific); //取消科学记数法
    cout<<setiosflags(ios::fixed); //按点输出显示
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout<<resetiosflags(ios::fixed); //取消按点输出显示
    cout<<setprecision(18); //精度为18,正常为6
    cout<<f<<' '<<f1<<' '<<f2<<endl;
    cout<<setprecision(6); //精度恢复为6
    }
    View Code
  • 相关阅读:
    MySQL锁之一:锁详解
    eclipse maven plugin 插件 安装 和 配置
    火星坐标系统
    使用Spring MVC统一异常处理实战
    websocket之二:WebSocket编程入门
    spring mvc 异常统一处理方式
    Android面向HTTP协议发送post请求
    用JAX-WS在Tomcat中公布WebService
    css3 -&gt; 多栏布局
    NSLayoutConstraint-代码实现自己主动布局的函数使用方法说明
  • 原文地址:https://www.cnblogs.com/tgycoder/p/5010463.html
Copyright © 2020-2023  润新知