看了程序5.3.1的运行结果,你可能会觉得输出的数字不太整齐。第一行的一位数都挤在了一起,而第二行开始的两位数都是整整齐齐的。那么,我们有什么办法让他们排排整齐么?大家自然就先想到空格了。不过如果为了个这么简单的功能,还要去编写一段判断一下这个数是几位的,要加几个空格之类代码就有点麻烦了。其实C++早已经为我们准备好了更方便的方法。这种方法就是设置域宽。
所谓域宽,就是输出的内容(数值或字符等等)需要占据多少个字符的位置,如果位置有空余则会自动补足。比如我们要设置域宽为2,那么当输出一位数1的时候输出的就是“ 1”,即在1前面加了一个空格。空格和数字1正好一共占用了两个字符的位置。
那有些时候我们不想在1前面补上空格,而是希望1前面补上0可不可以?当然也是可以的。我们可以设置填充字符,如果我们把0设置为填充字符,那么1前面就变成0了。
设置域宽的具体语法格式为:
cout <<setw(int n) <<被设置的输出内容1 [<<setw(int m) <<被设置的输出内容2 …];
设置填充字符的具体语法格式为:
cout <<setfill(char n) <<被设置的输出内容 [<<setfill(char m) <<被设置的输出内容12 …];
我们在设置域宽和填充字符的时候要注意几点:
下面我们来看一段有关输出图形的循环嵌套程序:(程序5.3.2)
#include "iostream.h"
#include "iomanip.h"
int main()
{
int a,b;
cout <<"请输入长方形的长和宽:" <<endl;
cin >>a >>b;
for (int i=1;i<=b;i++)//控制长方形的宽度
{
for (int j=1;j<=a;j++)//控制长方形的长度
{
cout <<setw(2) <<'*';
}
cout <<endl;
}
return 0;
}
运行结果:
请输入长方形的长和宽:
5 3↙
* * * * *
* * * * *
* * * * *