标准库定义了一组操纵符来次该流的格式状态。
操纵符是一个函数或一个对象,会影响流的状态,并能用作输入或输出的运算符的运算对象。例如
cout<<end;
cout.precision(12);
大多数用来改变状态的操纵符都是设置/复原成对的:一个用来将格式状态设置为新值,另一个用来将其复原,恢复成正常的默认状态。
定义在iostream中的操纵符:
1.
boolalpha | boolaalpha将true和false输出为字符串 |
noboolalpha | 将true和false输为1,0 |
cout<<boolalpha<<true<<" "<<false<<endl; // true false
cout<<noboolalpha<<true<<" "<<false<<endl; //1 0
2.
showbase | 对整数值输出表示进制的前缀 |
noshowbase | 不生成表示进制的前缀 |
cout<<showbase;
cout<<dec<<20<<endl; //20 (十进制)
cout<<oct<<20<<endl; //024 (八进制)
cout<<hex<<20<<endl; //0x14 (十六进制)
3.
showpoint | 对浮点值总是显示小数 |
noshowpoint | 只有当浮点值包含小数部分时才显示小数点 |
cout<<showpoint<<float(1)<<endl; //1.0000
4.
showpos | 对非负数显示+ |
noshwpos | 对非负数不显示+ |
cout<<showpos<<1<<endl; //+1
5.
uppercase | 对十六进制值中打印0X,在科学计数法中打印E |
nouppercase | 对十六进制值中打印0x,在科学计数法中打印e |
cout<<uppercase<<showbase<<hex;
cout<<1<<endl; //0X1
cout<<12345678<<endl; //0XBC614E
cout<<nouppercase;
cout<<1<<endl; //0x1
cout<<12345678<<endl; //0xbc614e
6.
dec | 整型值显示为十进制 |
hex | 整型值显示为十六进制 |
oct | 整型值显示为八进制 |
cout<<oct<<20<<endl; //24
cout<<hex<<20<<endl; //14
7.
left | 在值的右侧添加填充字符 |
right | 在值得左侧添加填充字符 |
internal | 在符号和值之间添加填充字符 |
setw() | 指定下个数字或字符串的最小空间 |
setfill() | 允许指定下个字符代替默认的空格来补白输出 |
(头文件为#include <iomanip>)
cout<<setw(12)<<16<<"end"<<endl; // 16end
cout<<left<<setw(12)<<16<<"end"<<endl; //16 end
cout<<right<<setw(12)<<16<<"end"<<endl; // 16end
cout<<internal<<setw(12)<<16<<"end"<<endl; // 16end
cout<<internal<<setw(12)<<-16<<"end"<<endl; //- 16end
cout<<setfill('!')<<setw(12)<<16<<"end"<<endl; //!!!!!!!!!!16end
cout<<setfill('!')<<setw(12)<<-16<<"end"<<endl; //-!!!!!!!!!16end
8.
fixed | 浮点值显示为定点十进制 |
scientific | 浮点值显示为科学计数法 |
hexfloat | 浮点数显示为十六进制(C++11新特性) |
defaultfloat | 重置浮点数格式为是进制(C++11新特性) |
cout<<fixed<<100*sqrt(2.0)<<endl; //141.421356
cout<<scientific<<100*sqrt(2.0)<<endl; //1.414214e+002
cout<<hexfloat<<100*sqrt(2.0)<<endl; //0x1.1ad7bcp+7
9.
unitbuf | 每次输出操作后都刷新缓冲区 |
nounitbuf | 恢复正常的缓冲区刷新方式 |
10.
skipws | 输入运算符跳过空白符 |
noskips | 输入运算符不跳过空白符 |
cin>>noskipws;
11.
flush | 刷新ostream缓冲区 |
ends | 插入空字符,然后刷新ostream缓冲区 |
endl | 插入换行,然后刷新ostream缓冲区 |
cout<<"a"<<ends<<"b"; //a b
cout<<"a"<<endl<<"b"; //a
//b
12.
cout.precision() | 返回当前打印精度 |
cout.precision(int) | 设置打印精度 |
setprecision(int) | 设置打印精度 |
cout<<cout.precision()<<endl; //6
cout.precision(8);
cout<<sqrt(2.0)<<endl; //1.4142136
cout<<setprecision(3);
cout<<sqrt(2.0)<<endl; //1.41