关于C++中cout的使用

控制cout格式化输出有三种方法,
1.使用ios类中的枚举变量
2.使用I/O控制符
3.使用ios类成员函数

此处先介绍第二种,其他两种以后更新。

在介绍I/O控制符之前,我先简单说一下endl的原理
endl的功能是换行+刷新缓冲区,
由于cout会对输出的内容进行缓冲,所以输出的内容并不会立即输出到目标设备(显示器)而是被存储在缓冲区中,直到缓冲区填满才输出。
一般输出的话,有三种情况会进行输出:1.刷新缓存区 2.缓存区满的时候 3.关闭文件
但是一般情况下,不加endl大多数情况下,也能正常输出,是因为在系统较为空闲时候,会查看缓存区的内容,如果发现新的内容,便进行输出。但是 你并不清楚,系统什么时候输出,什么时候不输出,与系统自身的运行状况有关。
而刷新缓存区,是强制性的,绝对性的输出。不取决于系统运行状况。

这篇文章中,介绍常用的I/O控制符。
以下代码是在vs2015下编写,首先要包含头文件

#include <iomanip>  //控制符头文件

1>十进制、八进制、十六进制输出

    int v1 = 30;
    int v2 = 300;
    int v3 = 1024;
    cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
    cout <<dec<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 十进制是默认输出

    cout <<oct<<v1<<" "<<v2<<" "<<v3<<" "<<endl;    //八进制输出

    cout <<hex<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 十六进制输出的时候数值默认是小字母    
    // 要恢复默认输出,如果不恢复默认的话,之后的输出会一直保持十六进制输出。
    cout <<dec<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 将控制符恢复默认

1

2>设置数值中字母大写输出setiosflags(ios::uppercase),设置数值中字母小写输出resetiosflags(ios::uppercase)

    int v1 = 30;
    int v2 = 300;
    int v3 = 1024;
    cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
    cout <<hex<<v1<<" "<<v2<<" "<<v3<<" "<<endl;
    cout <<setiosflags(ios::uppercase)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//设置十六进制中的字母是大写输出
    cout <<resetiosflags(ios::uppercase) <<v1<<" "<<v2<<" "<<v3<<" "<<endl;//恢复默认(小写字母输出)

2

3>设置输出宽度setw()

    int v1 = 30;
    int v2 = 300;
    int v3 = 1024;
    cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
    cout <<setw(1)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 输出预留空格数,空间多余则向右对齐,空间不足按数据长度输出
    cout <<setw(20)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;  // setw 操作符只对紧接其后的待输出变量有效。

3

4>左对齐,右对齐输出

    int v1 = 30;
    int v2 = 300;
    int v3 = 1024;
    cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
    cout <<setw(20)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//说明默认是right对齐
    cout <<setiosflags(ios::left)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//setiosflags(ios::left)设置输出为左对齐
    cout <<setw(20)<<setiosflags(ios::right)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// right是默认 

4

5>设置填充字符setfill()

    int v1 = 30;
    int v2 = 300;
    int v3 = 1024;
    cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;

    cout << setfill('*') << setw(20) <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
//setfill()控制符填充空白的字符
    cout << setfill(' ');  //恢复默认,填充空格

5

6>设置小数位数setprecision()

    double v1 = 22.0 / 7;
    cout << v1 << endl;
    //小数位数截断时,进行四舍五入处理。
    cout << setprecision(0) << v1 << endl;
    cout << setprecision(1) << v1 << endl;
    cout << setprecision(2) << v1 << endl;
    cout << setprecision(3) << v1 << endl;
    cout << setprecision(4) << v1 << endl;
    cout << setprecision(8) << v1 << endl;

    //setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。
    cout << setiosflags(ios::fixed);
    cout << v1 << endl;
    cout << setprecision(6) << endl;// 恢复默认值

6

7>强制显示小数点和无效0setiosflags(ios::showpoint);,强制显示正负号setiosflags(ios::showpos);

    double v1 = 5;
    double v2 = -5.8;
    cout << v1 << "  " << v2 << endl;
    // 强制显示小数点和无效0
    cout << setiosflags(ios::showpoint);
    cout << v1 << "  " << v2 << endl;
    // 强制显示正负号
    cout << setiosflags(ios::showpos);
    cout << v1 << "  " << v2 << endl;

7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值