【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符
文章目录
- 【C++语法】输出的设置 `iomanip` 与 `std::ios` 中的流操纵符
- 1. `iomanip` 中的流操纵方法
- 1.1 位宽操作类
- 1.1.1 `std::setw(x)`
- 1.1.2 `std::setfill(c)`
- 1.1.3 `std::left`
- 1.1.4 `std::right`
- 1.1.5 `std::internal`
- 1.2 小数操作类
- 1.2.1 `std::fixed`
- 1.2.2 `std::setprecision(x)`
- 1.2.3 `std::scientific`
- 1.2.4 `std::showpoint`
- 1.2.5 `std::noshowpoint`
- 1.3 整数操作类
- 1.3.1 `std::hex`
- 1.3.2 `std::dec`
- 1.3.3 `std::oct`
- 1.3.4 `std::showbase`
- 1.3.5 `std::noshowbase`
- 1.4 布尔值操作类
- 1.4.1 `std::boolalpha`
- 1.4.2 `std::noboolalpha`
- 1.5 其他操作类
- 1.5.1 `std::uppercase`
- 1.5.2 `std::nouppercase`
- 1.5.3 `std::showpos`
- 1.5.4 `std::noshowpos`
- 2. `std::ios` 中的流操纵方法
- 2.1 格式设置函数
- 2.1.1 `std::resetiosflags(f)`
- 2.1.2 `std::setiosflags(f)`
- 2.2 `std::ios` 的流操纵符
【C++语法】输出的设置 iomanip
与 std::ios
中的流操纵符
iomanip
是 C++ 标准库中用于格式化输出的头文件,提供了多种流操纵符(Manipulators),用于控制输出的对齐、宽度、精度、填充字符等。同时,这里面还会有 std::ios
中的流操纵符。还有这篇文章将会详细的讲解,希望能够帮上你
1. iomanip
中的流操纵方法
这些是 std
相关的标志位控制函数,可以直接用于 <<
像输出字符串一样输出调整格式,但是只会对这一条语句中的内容生效
1.1 位宽操作类
1.1.1 std::setw(x)
std::setw(x)
可以为下一个输出内容设置位宽为 xxx,也就是占用占用 xxx 个字符位,空缺的用某种字符补位。占位符默认为空格,且向右对齐
1.1.2 std::setfill(c)
std::setfill(c)
与 std::setw(n)
配合,可以设置占位符为 ccc,ccc 是字符,不是字符串
1.1.3 std::left
std::left
与 std::setw(n)
配合,可以设置输出内容为左对齐方式
1.1.4 std::right
std::right
与 std::setw(n)
配合,可以设置输出内容为右对齐方式(默认)
1.1.5 std::internal
std::internal
与 std::setw(n)
配合,表示设置数字为符号左对齐,数字右对齐的方式
1.2 小数操作类
1.2.1 std::fixed
std::fixed
用于固定输出的小数位数,例如 std::cout << std::fixed << 3.14000
输出 3.14000
而不是 3.14
1.2.2 std::setprecision(x)
std::setprecision(x)
表示设置浮点数保留小数点后 xxx 位,通常与 std::fixed
配合
为什么不能单独用
std::setprecision(x)
?
单独用是语法正确的,但是,在小学数学老师讲四舍五入时讲到过一个误区,4.9994.9994.999 四舍五入保留一位小数应该等于 5.05.05.0 而不是 555。加上std::fixed
防止去掉小数部分末尾的 000
1.2.3 std::scientific
std::scientific
用于将浮点数以科学计数法形式输出,e
默认小写,想要调成大写 E
可以使用 std::uppercase
,默认 std::nouppercase
1.2.4 std::showpoint
std::showpoint
用于强制让所有的数字加上小数点,例如 1
输出为 1.
,2.72
输出 2.72
1.2.5 std::noshowpoint
std::noshowpoint
用于让所有的数字不强制性地加上小数点,例如 3
输出 3
(默认)
1.3 整数操作类
1.3.1 std::hex
std::hex
设置整数以十六进制输出,a
~ f
默认小写,想要切换大写使用 std::uppercase
,默认 std::nouppercase
1.3.2 std::dec
std::dec
设置整数以十进制输出(默认)
1.3.3 std::oct
std::oct
设置整数以八进制输出
1.3.4 std::showbase
std::showbase
设置显示进制前缀,例如十六进制数前面加上 0x
(或 0X
),八进制数前面加上一个 0
1.3.5 std::noshowbase
std::noshowbase
设置不显示进制的前缀(默认)
1.4 布尔值操作类
布尔值是什么?
布尔值(Boolean Value),表示一种条件是否成立,111 或true
表示成立,000 或false
表示不成立,只有两个值。这个东西会在下一章的条件语句中提到
1.4.1 std::boolalpha
std::boolalpha
设置布尔值输出 true
或 false
1.4.2 std::noboolalpha
std::noboolalpha
设置布尔值输出 1
或 0
(默认)
1.5 其他操作类
1.5.1 std::uppercase
std::uppercase
设置十六进制字符 A
~ F
大写,设置科学计数法 E
大写
1.5.2 std::nouppercase
std::nouppercase
设置十六进制字符 A
~ F
小写,设置科学计数法 E
小写
1.5.3 std::showpos
std::showpos
使正数显示出 +
1.5.4 std::noshowpos
std::noshowpos
使正数不显示出 +
2. std::ios
中的流操纵方法
这些事 std::ios
(或 std::ios_base
)相关的流操纵符,使用另外的函数设置格式,可以让多行的 std::cout
使用同一个格式标志,还可以重置、叠加,它们的头文件也是 iomanip
2.1 格式设置函数
2.1.1 std::resetiosflags(f)
将之前的所有格式标志去除,并添加一个 std::ios
流操纵符 f
,也就是格式重定义
2.1.2 std::setiosflags(f)
再之前的基础上叠加一个 std::ios
流操纵符 f
,也就是格式叠加
2.2 std::ios
的流操纵符
和 iomanip
流操纵符一样,例如 std::fixed
、std::hex
,但是,在 std::ios
中,会写成 std::ios::fixed
、std::ios::hex
等,在 std
后面加一个 ios