setfill和setw总结
setfill是设置填充填充字符,setw设置输出的宽度,它们的只作用表现在紧接着输入的字符串上。这个宽度是填充后的宽度。所以 cout<<setfill(' ')<<setw(n)<<" " << setfill("M")<<setw(21-2*n)<<"M"中 setfill和setw只作用在" ",表示在" "前面填充n-1个空白。 而setfill("M")<<setw(21-2*n)<<"M"这一段是在"M"前面填充21-2*n-1个空白。 和 cout<<setfill(' ')<<setw(n)<<setfill("M")<<setw(21-2*n)<<"M" 是不一样的。 后者的因为setfill("M")不是一个字符,这种情况没有明确的说明该如何处理。从我用的VC输出的情况分析,处理方法是前面的setfill和setw失去了作用。 至于cout.width和count.fill一般是这样用的: cout.width(n); cout.fill('M'); cout << ... 如果是cout << cout.width(n)就是输出 cout.width(n)的返回值。表示设置的流的宽度,所以似乎一个数。至于为什么会输出这样的数值。分析起来比较麻烦,涉及到运算顺序一类的问题,而且也可能和编译器的实现方法有关,没有什么实际意义,还是老老实实分开写比较好。使用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<<"Amount1:["; cout<<setw(5)<<amt1<<"]\n"; cout<<"Amount2:["; 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
(1)setw(int n) 预设输出宽度
如:cout<<setw(6)<<123<<endl;
输出结果为“ 123”,在123的前面会有3个空格,123右对齐。
(2)setfill(char c) 预设填充字符
如:cout<<setfill(‘#’)<<123<<endl;
输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。
(3)setbase(int n) 预设整数输出进制
如:cout<<setbase(8)<<255<<endl;
输出显示结果为377
(4)setprecision(int n)用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。示例程序如下:
#include <iostream.h>
#include <iomanip.h> //格式控制
void main()
{
doubleamount = 22.0/7;
cout<<amount<<endl; //(1)
cout<<setprecision(0)<<amount<<endl //(2)
<<setprecision(1)<<amount<<endl //(3)
<<setprecision(2)<<amount<<endl //(4)
<<setprecision(3)<<amount<<endl //(5)
<<setprecision(4)<<amount<<endl; //(6)
cout<<setiosflags(ios::fixed);
cout<<setprecision(8)<<amount<<endl; //(7)
cout<<setiosflags(ios::scientific)<<amount<<endl;//(8)
cout<<setprecision(6);
}
第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待:第3~6行输出按设置的有效位数输出。第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。在用指数形式输出时,setprecision(n)表示小数位数。(可是这个指数形式的输出我用VC6没有运行出来)。
setw(int _w)讲解 << setw(int _w)<< 输出位宽 如<< setw(7)<<1000 输出结果为"1000 "(紧跟三个空格) 而如<< setw(3)<< 1000 位宽小于原来的数字的位宽那么按照原来的格式输出"1000" 前后无空格
setfill() 讲解 setfill(int _m) 随setw(int _w)一起使用 意思是在set(int_w)设定后的空格填充指定的字符 注意setfill里边的参数是int _m 是个整数 所以如果我们要用空格来填充*号的时候 要使用setfill('*')[字符] 而不是setfill(*)
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/54667500
- 点赞
- 收藏
- 关注作者
评论(0)