cout格式化输出整理

本文介绍了C++中使用cout进行格式化输出的方法,包括调整字段宽度、设置填充字符、控制浮点数精度、显示末尾0和小数点、设置显示模式等,并详细解释了如何使用setw、setprecision等函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ cout格式化输出控制

#include <iostream>
#include <iomanip>          //setw() setprecision()  setfill()
using namespace std;

//格式化输出
int main(int argc, char* argv[])
{
    //01-调整字段宽度     临时(只影响接下来的)   streamsize本VS中是long long
    /* streamsize width()       //返回当前宽度,默认是0
     * streamsize width(streamsize i)  //设置宽度为i,并返回之前的宽度 
     */
    long long w = cout.width(30);   //0
    w = cout.width();         //30
    w = cout.width();         //30
    cout << 123 << endl;
    w = cout.width();         //0

    cout << setw(12) << 1 << endl;    //常用


    //02-填充字符  默认填充是空格    永久
    /* CharT fill() const;        (1)同width
     * CharT fill( CharT ch );    (2)
     */
    char ch = cout.fill();            
    cout.fill('*');
    cout << setw(10) << 123 << endl;
    cout << setw(10) << 123 << endl;

    cout << setfill('*');

    //03-设置浮点数的显示精度          永久
    /* streamsize precision()                      //返回当前精度,默认是6
     * streamsize precision(streamsize new_preci)  //设置精度为new,并返回之前的精度 
     */
    long long prec = cout.precision(12);
    cout << 12.5;
    cout << 25.3;
    prec = cout.precision();

    cout << setprecision(12);

    //04-打印末尾的0和小数点
    //ios_base::showpoint是一个枚举值,静态常量
    //static constexpr _Fmtflags showpoint = (_Fmtflags)_IOSshowpoint;
    cout.setf(ios_base::showpoint);
    cout << 2.0 << endl;         //不加cout.setf(ios_base::showpoint); 显示为2;加的话,显示为2.00000
    cout << 2 << endl;           //加或者不加都是2, 推论:整数还是显示整数
    cout << 20000.0 << endl;     //显示20000.0
    cout << 200000.0 << endl;    //显示200000.
    cout << 2000000.0 << endl;   //2.00000e+06
    cout << fixed << 2000000.0 << endl;   //2000000.000000  貌似如果整数位数超过prec的话,小数点个数表示prec个
    //05-再谈setf()        永久   ---置对应的标记为1
    /* fmtflags VS中是int
     * fmtflags setf( fmtflags flags );  (1) 
     * fmtflags setf( fmtflags flags, fmtflags mask );  (2)  //常用的mask只有3个basefield, adjustfield, floatfield
     */
    // (1) --------------------------
    cout.setf(ios_base::boolalpha);   //显示true false,  not 0 or 1
    cout.setf(ios_base::showbase);    //显示基数前缀0, 0x
    cout.setf(ios_base::showpoint);   //显示末尾的小数点
    cout.setf(ios_base::uppercase);   //显示16进制大写,以及E
    cout.setf(ios_base::showpos);     //正数前面加上‘+’

    // (2) ---------------------------
    //进制
    cout.setf(ios_base::dec, ios_base::basefield);   //默认
    cout.setf(ios_base::oct, ios_base::basefield);
    cout.setf(ios_base::hex, ios_base::basefield);

    //浮点计数相关    没有专门指示浮点数默认显示模式的标记
    cout.setf(ios_base::fixed, ios_base::floatfield);      //定点计数法  
    cout.setf(ios_base::scientific, ios_base::floatfield); //科学
    cout.setf(0, ios_base::floatfield);    //默认

    //对齐调整
    cout.setf(ios_base::left, ios_base::adjustfield);
    cout.setf(ios_base::right, ios_base::adjustfield);      //默认
    cout.setf(ios_base::internal, ios_base::adjustfield);   //符号或者基数前缀左对齐,值右对齐

    //如何恢复设置
    //(1)
    ios_base::fmtflags old = cout.setf(ios_base::showbase);
    cout.setf(old);
    //(2)
    ios_base::fmtflags old = cout.setf(ios_base::right, ios_base::adjustfield);
    cout.setf(old, ios_base::adjustfield);

    //06-谈谈unsetf()     永久     ---置对应的标记为0
    /* void unsetf( fmtflags flags );
     * Unsets the formatting flags identified by flags.
     */
    //对于(1)setf
    //cout.setf(ios_base::boolalpha);
    //cout.unsetf(ios_base::boolalpha);
    //对于(2)setf
    cout.setf(ios_base::left, ios_base::adjustfield);   
    cout.setf(0, ios_base::adjustfield);   //设为默认
    cout.unsetf(ios_base::adjustfield);    //设为默认

    //07-控制符 存在于<iostream>

    //0701-修改显示时使用的技术系统   永久   
       //默认
    //setf()   (1)
    cout << boolalpha;      //cout.setf(ios_base::boolalpha);
    cout << noboolalpha;    //cout.unsetf(ios_base::boolalpha);
    cout << showbase;       //cout.setf(ios_base::showbase);
    cout << noshowbase;     //cout.unsetf(ios_base::showbase); 
    cout << showpoint;      //cout.setf(ios_base::showpoint);
    cout << noshowpoint;    //cout.unsetf(ios_base::showpoint);
    cout << uppercase;      //cout.setf(ios_base::uppercase);
    cout << nouppercase;    //cout.unsetf(ios_base::uppercase);
    cout << showpos;        //cout.setf(ios_base::showpos); 
    cout << noshowpos;      //cout.unsetf(ios_base::showpos); 

    //setf()   (2)
    //进制
    cout << hex;     //或者  hex(cout);     //等价于cout.setf(ios_base::hex, ios_base::basefield);
    cout << oct;                   //等价于cout.setf(ios_base::oct, ios_base::basefield);
    cout << dec;    //默认         //等价于cout.setf(ios_base::dec, ios_base::basefield);
    //浮点计数
    cout << fixed;             //cout.setf(ios_base::fixed, ios_base::floatfield);
    cout << scientific;        //cout.setf(ios_base::scientific, ios_base::floatfield);
    //对齐方式
    cout << left;              //cout.setf(ios_base::left, ios_base::adjustfield);
    cout << right;             //cout.setf(ios_base::right, ios_base::adjustfield);
    cout << internal;          //cout.setf(ios_base::internal, ios_base::adjustfield);

    return 0;
}

参考资料

cppreference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值