控制符 | 作用 |
dec | 设置整数的基数为10 |
hex | 设置整数的基数为16 |
oct | 设置 整数的基数为8 |
setbase(n) | 设置整数的基数为n(n只能是16,10,8之一) |
setfill(c) | 设置填充字符c,c可以是字符常量‘c’或字符变量 |
setprecision(n) | 设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位 数)形式和scientific(指数)形式输出时,n为小数位数。 |
setw(n) | 设置字段宽度为n位。 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示。 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法(即指数形式)显示。 |
setiosflags(ios::left) | 输出数据左对齐。 |
setiosflags(ios::right) | 输出数据右对齐。 |
setiosflags(ios::shipws) | 忽略前导的空格。 |
setiosflags(ios::uppercase) | 在以科学计数法输出E和十六进制输出字母X时,以大写表示。 |
setiosflags(ios::showpos) | 输出正数时,给出“+”号和“-”号。 |
resetiosflags | 终止已设置的输出格式状态,在括号中应指定内容。 |
2.用流对象的成员 控制输出格式,如cout.setf(格式状态)<<数据<<endl;
流成员函数 | 与之作用相同的控制符 | 作用 |
precision(n) | setprecision(n) | 设置实 数的精度为n位。 |
width(n) | setw(n) | 设置字段宽度为n位。 |
fill(c) | setfill(c) | 设置填充字符c。 |
setf( ) | setiosflags( ) | 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。 |
unsetf( ) | resetiosflags( ) | 终止已设置的输出格式状态。在括号中就应指定的格式状态。 |
cout.width(10);
cout.setf(ios::hex);
3.设置格式状态的格式标志
格式标志 | 作用 |
ios::left | 输出数据在本域宽范 围内左对齐 |
ios::right | 输出数据在本域宽范围内右对齐 |
ios::internal | 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充 |
ios::dec | 设置整数的基数为10 |
ios::oct | 设置整数的基数为8 |
ios::hex | 设置整数的基数为16 |
ios::showbase | 强制输出整数的基数(八进制以0打头,十六进制以0x打头) |
ios::showpoint | 强制输出浮点数的小点和尾数0 |
ios::uppercase | 在以科学计数法输出E和十六进制输出字母X时,以大写表示 |
ios::showpos | 输出正数时,给出“+”号。 |
ios::scientific | 设置浮点数以科学计数法(即指数形式)显示 |
ios::fixed | 设置浮点数以固定的小数位数显示 |
ios::unitbuf | 每次输出后刷新所有流 |
ios::stdio | 每次输出后清除 stdout,stderr |
使用这些格式需要声明包含<iomainip>
long flags( ) const 返回当前的格式标志。
long flays(long newflag) 设置格式标志为newflag,返回旧的格式标志。
long setf(long bits) 设置指定的格式标志位,返回旧的格式标志。
long setf(long bits,long field)将field指定的格式标志位置为bits,返回旧的格式标志
long unsetf(long bits) 清除bits指定的格式标志位,返回旧的格式标志。
long fill(char c) 设置填充字符,缺省条件下是空格。
char fill( ) 返回当前填充字符。
int precision(int val) 设置精确度为val,控制输出浮点数的有效位,返回旧值。
int precision( ) 返回旧的精确度值。
int width(int val) 设置显示数据的宽度(域宽),返回旧的域宽。
int width( )只返回当前域宽,缺省宽度为0。这时插入操作能按表示数据的最小宽度显示数据
dec 十进制的输入输出
hex 十六进制的输入输出
oct 八进制的输入输出
ws 提取空白字符
flush 刷新流
resetiosflags(long) 请除特定的格式标志位
setiosflags(long) 设置特定的格式标志位
setfill(char) 设置填充字符
setprecision(int) 设置输出浮点数的精确度
setw(int) 设置域宽格式变量
C++输出流的格式控制setw()、setfill()、setbase()、setprecision()、tellp...
inline SMANIP(long) resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
inline SMANIP(int) setfill(int _m) {return SMANIP(int)(__setfill, _m); }
inline SMANIP(long) setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
inline SMANIP(int) setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
inline SMANIP(int) setw(int _w) { return SMANIP(int)(__setw, _w); }
//他们都是inline 内联函数
(1)setw(int n) 预设输出宽度
(2)setfill(char c) 预设填充字符
如:cout<<setw(6)<<123<<endl; //输出结果为“ 123”,在123的前面会有3个空格,123右对齐。
如:cout<<setw(6)<<setfill(‘#’)<<123<<endl; //输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。
如:cout<<setfill(‘#’)<<setw(6)<<123<<endl; //输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。
后两个例子显示的结果一致,说明setw()和setfill()可以交换位置。
(3)setbase(int n) 预设整数输出进制
下面三行,都是以八进制输出的。思考为什么;
如:cout<<setbase(8)<<255<<endl; //输出显示结果为377
cout<<oct <<255<< endl;
cout<<255;
(4)setprecision(int n) 用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。
示例程序1如下:
#include <iostream>
#include <iomanip> //格式控制
using namespace std;
void main()
{
double amount = 22.0/7;
cout <<amount <<endl; //(1)输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6,结果为3.14286
cout<<setprecision(0) <<amount <<endl //(2)setprecision(0),gcc则还安照默认的有效数位对待,输出3.14286
<<setprecision(1) <<amount <<endl //(3)3
<<setprecision(2) <<amount <<endl //(4)3.1
<<setprecision(3) <<amount <<endl //(5)3.14
<<setprecision(4) <<amount <<endl; //(6)3.143
cout <<setiosflags(ios::fixed); //设置浮点数以固定的小数位数显示
cout <<setprecision(8) <<amount <<endl;
cout <<setiosflags(ios::scientific)<<amount<<endl; //用setiosflags(ios::scientific)来表示指数表示的输出形式。
//其有效位数沿用上次的设置值8。
cout <<setprecision(6);
system("pause");
}
输出的结果如下:
3.14286
3.14286 //setprecision(0)gcc则还安照默认的有效数位对待,输出3.14286
3
3.1
3.14
3.143
3.14285714
0x1.92492492p+1 ??为什么是十六进制呢,难道p是十六进制的标志?
请按任意键继续. . .
第7行输出setiosflags(ios::fixed),所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。
第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。在用指数形式输出时,setprecision(n)表示小数位数。
示例程序2如下:
#include<iostream>
#include <iomanip> //格式控制
using namespace std;
void main()
{
double f=2.0/3.0 , f1=0.000000001 , f2=-9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl; //正常输出0.666667 1e-009 -9.9
cout.setf(ios::showpos); //强制在正数前加+号-号 ;可以用cout<<setiosflags(ios::showpos);替代
cout<<f<<' '<<f1<<' '<<f2<<endl; //+0.666667 +1e-009 -9.9
cout.unsetf(ios::showpos); //取消正数前加+号 ;可以用cout<<resetiosflags(ios::showpos);替代
cout.setf(ios::showpoint); //强制显示小数点后的无效0 ;可以用cout<<setiosflags(ios::showpoint); 代替
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpoint); //取消显示小数点后的无效0 ;可以用cout<<resetiosflags(ios::showpoint); 代替
cout.setf(ios::scientific); //科学记数法。可以用cout<<setiosflags(ios::scientific); 替代
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::scientific); //取消科学记数法。可以用cout<<resetiosflags(ios::scientific); 代替
cout.setf(ios::fixed); //按点输出显示,可以用cout<<setiosflags(ios::fixed);代替
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::fixed); //取消按点输出显示,可以用cout<<resetiosflags(ios::fixed);代替
cout.precision(18); //精度为18,默认精度为6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.precision(6); //精度恢复为6
system("pause");
}
0.666667 1e-009 -9.9
+0.666667 +1e-009 -9.9
0.666667 1.00000e-009 -9.90000
6.666667e-001 1.000000e-009 -9.900000e+000
0.666667 0.000000 -9.900000
0.66666666666666663 1.0000000000000001e-009 -9.9000000000000004
请按任意键继续. . .