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)
就达到你的要求了。
关于控制符的作用范围,你可以多查阅一些相关资料,也要自己多试验,这样才能掌握的牢固。

使用 setfillsetw 和 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]

您可看到,上面的输出与使用 widthfill 和 precision 操作器的程序的输出是相同的。 
附:setw()设置域宽 
就是你的输出要占多少个字符 
比如: 
cout<<setw(5)<<12345<<endl; 
就输出 
12345 
cout<<setw(6)<<12345<<endl; 
输出 
空格+12345

 setfill()只能接受一个字符形参,不能接受字符串形参

posted @ 2013-05-16 10:53  herizai  阅读(1904)  评论(0编辑  收藏  举报