使用cout来进行格式化输出

1.修改显示时使用的计数系统

ostream类是从ios类派生来的,而后者是从ios_base派生来的。ios_base类存储了描述格式状态的信息。例如,一个类成员中某些位决定了使用的计数系统,而另一个成员则决定了字段宽度。通过使用控制符,可以控制显示整数时使用的计数系统。通过使用ios_base的成员函数,可以控制字段的宽度和小数位数。
要控制整数以十进制、十六进制、八进制显示,可以使用dec、hex和oct控制符。
例如:

#include <iostream>
int main()
{
    using namespace std;
    cout<<"Enter an integer: ";
    int n;
    cin>>n;

    cout<<"n   n*n\n";//默认输出
    cout<<n<<"   "<<n*n<<"(decimal)\n";

    cout<<hex;//十六进制输出
    cout<<n<<"   "<<n*n<<"(hexadecimal)\n";

    cout<<oct<<n<<"   "<<n*n<<"(octal)\n";//八进制输出

    dec(cout);//十进制输出
    cout<<n<<"   "<<n*n<<"(decimal)\n";
    return 0;
}

2.调整字符宽度

cout.width(int);

注意:width( )方法只影响接下来显示的一个项目,然后字段宽度将恢复为默认值

3.填充字符

cout.fill('*');//用 * 来填充字段中未被使用的部分

注意:与字段宽度不同的是,新的填充字符将一直有效,直到更改它为止。

4.设置浮点数的显示精度

cout.precision(5);//设置精度为5

5.打印末尾的0和小数点

cout.setf(ios_base::showpoint);

setf( )是ios_base类中的一个格式化函数,setf( )有两个原型。第一个为:

fmtflags setf(fmtflags);

其中,fmtflags是bitmask类型的typedef名,用于存储格式标记。这个版本的setf( )是用来设置单位控制的格式信息。
有下面一些格式常量:

                 ios_base::boolalpha   输入和输出bool值,可以为true或false
                 ios_base::showbase    对于输出,使用C++基数前缀(O,Ox)
                 ios_base::showpoint   显示末尾的小数点
                 ios_base::uppercase   对于16进制输出,使用大写字母,E表示法
                 ios_base::showpos     在正数前面加上+

第二个setf( )原型接受两个参数,并返回以前的设置:

fmtflags setf(fmtflags, fmtflags);

函数的这种重载格式用于设置由多位控制的格式选项。第一个参数和以前一样,也是包含了所需设置的fmtflags值,第二个参数指出要清楚第一个参数中的哪些位。

setf(long, long)的参数

这里写图片描述
看下面的例子:

#include <iostream>
#include <cmath>

int main()
{
    using namespace std;
    cout.setf(ios_base::left,ios_base::adjustfield);//左对齐
    cout.setf(ios_base::showpos);//在正数前面加上+
    cout.setf(ios_base::showpoint);//显示末尾的小数点
    cout.precision(3);//精度为3

    ios_base::fmtflags old = cout.setf(ios_base::scientific,ios_base::floatfield);

    cout<<"Left Justification:\n";
    long n;
    for(n = 1; n <= 41; n += 10)
    {
        cout.width(4);//字段宽度为4
        cout<<n<<"|";
        cout.width(12);//字段宽度为12
        cout<<sqrt(double(n))<<"|\n";
    }

    cout.setf(ios_base::internal,ios_base::adjustfield);//符号或基数前缀左对齐,值右对齐
    cout.setf(old,ios_base::floatfield);//恢复以前的格式设置

    cout<<"Internal Justification:\n";
    for(n = 1; n <= 41; n += 10)
    {
        cout.width(4);
        cout<<n<<"|";
        cout.width(12);
        cout<<sqrt(double(n))<<"|\n";
    }

    cout.setf(ios_base::right,ios_base::adjustfield);//右对齐
    cout.setf(ios_base::fixed,ios_base::floatfield);//使用定点计数法
    cout<<"Right Justification:\n";
    for(n = 1; n <= 41; n += 10)
    {
        cout.width(4);
        cout<<n<<"|";
        cout.width(12);
        cout<<sqrt(double(n))<<"|\n";
    }
    return 0;
}

输出结果为:

Left Justification:
+1 |+1.000e+000 |
+11 |+3.317e+000 |
+21 |+4.583e+000 |
+31 |+5.568e+000 |
+41 |+6.403e+000 |
Internal Justification:
+ 1|+ 1.00|
+ 11|+ 3.32|
+ 21|+ 4.58|
+ 31|+ 5.57|
+ 41|+ 6.40|
Right Justification:
+1| +1.000|
+11| +3.317|
+21| +4.583|
+31| +5.568|
+41| +6.403|

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值