使用cout来进行格式化输出

来源:互联网 发布:淘宝比价软件app 编辑:程序博客网 时间:2024/04/28 13:22

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