iomanip
setw控制符只对后面紧跟的起作用,而setfill控制符一旦设定,就会对后面一直起作用,直到你重新设置。
我给你举个例子,看下面这段程序:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
cout<<setw(8)<<setfill('*')<<123<<endl;
cout<<setw(8)<<456<<endl;
return 0;
}
输出结果是:
*****123
*****456
如果只想填满紧跟后面的,必须重新设置:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
cout<<setw(8)<<setfill('*')<<123<<endl;
cout<<setw(8)<<setfill(' ')<<456<<endl;
return 0;
}
注意:重新设置的填充符是空格
这样运行结果是:
*****123
空格456
(由于百度知道不允许每行开头有空格,所以我打上两个汉字,实际运行的时候是五个空格加上456)
就达到你的要求了。
关于控制符的作用范围,你可以多查阅一些相关资料,也要自己多试验,这样才能掌握的牢固。
使用 setfill、setw 和 setprecision 操作器,这些操作器带有参数,并在头文件 iomanip.h 中定义。因此,此头文件必须包括在程序中。
#include<iostream.h>
#include <iomanip.h>
#include<conio.h>
void main()
{
int amt1 = 100, amt2 = 12345;
float f1 = 10.0/3.0;
cout<<setfill('*');
cout<<"Amount 1:[";
cout<<setw(5)<<amt1<<"]\n";
cout<<"Amount 2:[";
cout<<setw(4)<<amt2<<"]\n";
cout<<"Default f1 = ["<<f1<<"]\n";
cout<<setprecision(2)<<"f1 = ["<<f1<<"]\n";
}
输出:
Amount 1:[**100]
Amount 2:[12345]
Default f1 = [3.33333]
f1 = [3.3]
您可看到,上面的输出与使用 width、fill 和 precision 操作器的程序的输出是相同的。
附:setw()设置域宽
就是你的输出要占多少个字符
比如:
cout<<setw(5)<<12345<<endl;
就输出
12345
cout<<setw(6)<<12345<<endl;
输出
空格+12345
setfill()只能接受一个字符形参,不能接受字符串形参