14.4.7 设置域宽

    域宽是用来控制输出的,在ios类中用int型量x_width存放,对域宽进行操作的函数有以下两个。

    1.int width函数

    此函数是用来返回当前的域宽值,其函数实现如下所示。


    int ios_base:width() { return x_width; }

    2.int width(int wid)函数

    此函数用来设置域宽,并返回原来的域宽,具体函数的定义如下所示。


    int ios_base:width(int wid) { int i=x_width; x_width=wid; return i; }

    默认时(即不对width进行设置的情况下),输出一个值时,其占据的屏幕宽度大小取决于其字符数。width函数用以指定最小域宽,当值的输出宽度(字符数)小于指定的域宽时,可用当前的填充字符(默认为空格)将其补充到指定的域宽;而当值的长度超出最小域宽时,不会被截断,C++会增宽字段,以容纳该数据。

    如示例代码14.11所示。

    代码14.11 width函数用法WidthSample


    <———————————-文件名:example1411.cpp———————————————-> 01 #include<iostream> 02 using namespace std; 03 int main() 04 { 05 int i=cout. width();//返回当前域宽 06 cout<<"默认宽度为:"<<i<<endl; 07 cout. width(20);//设置域宽为20 08 i=cout. width();//返回当前域宽 09 cout<<"修改后域宽为:"<<i<<endl; 10 cout<<"一次有效:"<<cout.width()<<endl;//域宽为20,生效 11 cout<<5<<endl;//域宽设定不再有效 12 return 0; 13 }

    输出结果如下所示。


    默认宽度为:0 □□□□□□修改后域宽为:20 一次有效:0 5

    【代码解析】代码第5行首先输出了系统的默认域宽,结果为0,证明对任何输出都没有设最小域宽的限制,默认情况下值所占据的屏幕格数等于其字符数,代码第7行设定为20后,输出域宽最小为20,因此语句“cout<<"修改后域宽为:"<<i<<end1;”的结果为“□□□□□□修改后域宽为:20”,每个汉字相当于两个字符格数,因此,以默认的右对齐方式放置字符串,并以默认的填充字符(空格)使其达到20格。对齐方式可以通过格式状态字进行设置,使用稍后要介绍的ios_base类成员函数fill也可以指定其他填充字符。

    注意

    width函数仅作用于下一次输出,在语句“cout<<"修改后域宽为:"<<i<<endl;”中,i的输出便没有了域宽的要求,因此,如有必要,在每条输出语句前都应重新设定域宽。