标准库定义了操纵符来修改流的状态,endl 就是一个操纵符,它输出一个换行符并刷新缓冲区。
控制布尔值格式- boolalpha 控制输出 true、false。
- noboolalpha 取消输出 true、false,恢复默认的输出格式。
cout << "default bool values: " << true << " " << false << endl;
cout << "alpha bool values: " << boolalpha << true << " " << false << endl;
cout << noboolalpha;
cout << true << endl;
指定整型值的进制
- oct 八进制。
- hex 十六进制。
- dec 十进制。
cout << "default:" << 20 << " " << 1024 << endl;
cout << "octal:" <<oct<< 20 << " " << 1024 << endl;
cout << "hex:" << hex<<20 << " " << 1024 << endl;
cout << "decimal:" << dec << 20 << " " << 1024 << endl;
在输出中指出进制
- showbase 显示进制。
- noshowbase 恢复流默认状态。
cout << showbase;
cout << "default:" << 20 << " " << 1024 << endl;
cout << "in oct:" << oct<<20 << " " << 1024 << endl;
cout << "in hex:" << hex<<20 << " " << 1024 << endl;
cout << "in decimal:" << dec<<20 << " " << 1024 << endl;
cout << noshowbase;
浮点数的输出格式控制分为:
- 以多高的精度打印。
- 数值是打印为十六进制、定点十进制还是科学计数法形式。
- 没有小数部分的浮点值是否打印小数点。
默认情况下:
- 浮点数按六位精度打印。
- 如果浮点值没有小数部分,则不打印小数点。
- 非常大或非常小的值打印为科学计数法形式,其它值打印为定点十进制形式。
指定打印精度
- 调用 precision 成员。
- 使用 setprecision 操纵符,定义在头文件 iomanip 中。
cout << "Precision: " << cout.precision() << endl; //@ 查看当前的打印精度
cout << "Values: " << sqrt(2.0) << endl;
cout.precision(12); //@ 设置打印精度
cout << "Precision:" << cout.precision() << endl;
cout << "Values: " << sqrt(2.0) << endl;
cout << setprecision(3);
cout << "Values: " << sqrt(2.0) << endl;
显示小数点
- showpoint 对浮点值总是显示小数点。
- noshowpoint 只有浮点值包含小数部分时才显示小数点。
cout << showpoint;
cout << 3.0 << endl;
cout << noshowpoint;
cout << 3.0 << endl;
指定浮点数计数法
- scientific 浮点值显示为科学计数法
- fixed 浮点值显示为定点十进制
- hexfloat 浮点值显示为十六进制 (C++ 11)
- defaultfloat 重置浮点数格式为十进制 (C++ 11)
cout << "default format:" << 100 * sqrt(2.0) << endl;
cout <<"scientific format:"<< scientific << 100 * sqrt(2.0) << endl;
cout <<"fixed decimal format:" << fixed <<100 * sqrt(2.0) << endl;
cout << "hex decimal format:" << hexfloat << 100 * sqrt(2.0) << endl;
cout <<"use defaults:"<<defaultfloat<< 100 * sqrt(2.0) << endl;
iostream 中的其它操纵符
操纵符 | 说明 |
uppercase | 十六进制 0X,科学计数法 E |
nouppercase | 十六进制 0x,科学计数法 e |
showpos | 对非负数显示 + |
noshowpos | 对非负数不显示 + |
left | 在值的右侧添加填充字符 |
right | 在值的左侧添加填充字符 |
internal | 在符号和值之间添加填充字符 |
unitbuf | 每次输出操作后都刷新缓冲区 |
nounitbuf | 恢复正常的缓冲区刷新方式 |
skipws | 输入运算符跳过空白符 |
noskipws | 输入运算符不跳过空白符 |
flush | 刷新 ostream 缓冲区 |
ends | 插入空字符,然后刷新 ostream 缓冲区 |
endl | 插入换行,然后刷新 ostream 缓冲区 |
iomanip 中的操纵符
操纵符 | 说明 |
setfill(ch) | 用 ch 填充空白 |
setprecision(n) | 将浮点精度设置为n |
set(w) | 读或写值的宽度为w个字符 |
setbase(b) | 将整数输出为b进制 |
int i = -16;
double d = 3.14159;
//@ 默认右对齐
cout << "i: " << setw(12) << i << endl;
cout << "d: " << setw(12) << d << endl;
cout << left; //@ 设置左对齐
cout << "i: " << setw(12) << i << endl;
cout << "d: " << setw(12) << d << endl;
//@ 恢复右对齐
cout << right;
cout << "i: " << setw(12) << i << endl;
cout << "d: " << setw(12) << d << endl;
//@ 补白第一列,但补在域的内部
cout << internal;
cout << "i: " << setw(12) << i << endl;
cout << "d: " << setw(12) << d << endl;
cout << setfill('#');
cout << "i: " << setw(12) << i << endl;
cout << "d: " << setw(12) << d << endl;
setfill(' ');
默认情况下,输入运算符会忽略空白符(空格符,制表符,换行符,换纸符,回车符)。
操纵符 noskipws 会令输入运算符读取空白符,而不是跳过,恢复默认行为可以使用 skipws。
char ch;
while (cin >> ch) //@ 输入 ab c
cout << ch; //@ 输出 abc
cin >> noskipws;
while (cin >> ch) //@ ab c
cout << ch; //@ ab c
cin >> skipws;