【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符

文章目录

  • [【C++语法】输出的设置 iomanipstd::ios 中的流操纵符](#【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符)
    • [1. iomanip 中的流操纵方法](#1. iomanip 中的流操纵方法)
      • [1.1 位宽操作类](#1.1 位宽操作类)
        • [1.1.1 std::setw(x)](#1.1.1 std::setw(x))
        • [1.1.2 std::setfill(c)](#1.1.2 std::setfill(c))
        • [1.1.3 std::left](#1.1.3 std::left)
        • [1.1.4 std::right](#1.1.4 std::right)
        • [1.1.5 std::internal](#1.1.5 std::internal)
      • [1.2 小数操作类](#1.2 小数操作类)
        • [1.2.1 std::fixed](#1.2.1 std::fixed)
        • [1.2.2 std::setprecision(x)](#1.2.2 std::setprecision(x))
        • [1.2.3 std::scientific](#1.2.3 std::scientific)
        • [1.2.4 std::showpoint](#1.2.4 std::showpoint)
        • [1.2.5 std::noshowpoint](#1.2.5 std::noshowpoint)
      • [1.3 整数操作类](#1.3 整数操作类)
        • [1.3.1 std::hex](#1.3.1 std::hex)
        • [1.3.2 std::dec](#1.3.2 std::dec)
        • [1.3.3 std::oct](#1.3.3 std::oct)
        • [1.3.4 std::showbase](#1.3.4 std::showbase)
        • [1.3.5 std::noshowbase](#1.3.5 std::noshowbase)
      • [1.4 布尔值操作类](#1.4 布尔值操作类)
        • [1.4.1 std::boolalpha](#1.4.1 std::boolalpha)
        • [1.4.2 std::noboolalpha](#1.4.2 std::noboolalpha)
      • [1.5 其他操作类](#1.5 其他操作类)
        • [1.5.1 std::uppercase](#1.5.1 std::uppercase)
        • [1.5.2 std::nouppercase](#1.5.2 std::nouppercase)
        • [1.5.3 std::showpos](#1.5.3 std::showpos)
        • [1.5.4 std::noshowpos](#1.5.4 std::noshowpos)
    • [2. std::ios 中的流操纵方法](#2. std::ios 中的流操纵方法)
      • [2.1 格式设置函数](#2.1 格式设置函数)
        • [2.1.1 std::resetiosflags(f)](#2.1.1 std::resetiosflags(f))
        • [2.1.2 std::setiosflags(f)](#2.1.2 std::setiosflags(f))
      • [2.2 std::ios 的流操纵符](#2.2 std::ios 的流操纵符)

【C++语法】输出的设置 iomanipstd::ios 中的流操纵符

iomanip 是 C++ 标准库中用于格式化输出的头文件,提供了多种流操纵符(Manipulators) ,用于控制输出的对齐、宽度、精度、填充字符等。同时,这里面还会有 std::ios 中的流操纵符。还有这篇文章将会详细的讲解,希望能够帮上你

1. iomanip 中的流操纵方法

这些是 std 相关的标志位控制函数,可以直接用于 << 像输出字符串一样输出调整格式,但是只会对这一条语句中的内容生效

1.1 位宽操作类

1.1.1 std::setw(x)

std::setw(x) 可以为下一个输出内容设置位宽为 x x x,也就是占用占用 x x x 个字符位,空缺的用某种字符补位。占位符默认为空格,且向右对齐

1.1.2 std::setfill©

std::setfill(c)std::setw(n) 配合,可以设置占位符为 c c c, c c c 是字符 ,不是字符串

1.1.3 std::left

std::leftstd::setw(n) 配合,可以设置输出内容为左对齐方式

1.1.4 std::right

std::rightstd::setw(n) 配合,可以设置输出内容为右对齐方式(默认)

1.1.5 std::internal

std::internalstd::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) 表示设置浮点数保留小数点后 x x x 位,通常与 std::fixed 配合

为什么不能单独用 std::setprecision(x)

单独用是语法正确的,但是,在小学数学老师讲四舍五入时讲到过一个误区, 4.999 4.999 4.999 四舍五入保留一位小数应该等于 5.0 5.0 5.0 而不是 5 5 5。加上 std::fixed 防止去掉小数部分末尾的 0 0 0

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),表示一种条件是否成立, 1 1 1 或 true 表示成立, 0 0 0 或 false 表示不成立,只有两个值。这个东西会在下一章的条件语句中提到

1.4.1 std::boolalpha

std::boolalpha 设置布尔值输出 truefalse

1.4.2 std::noboolalpha

std::noboolalpha 设置布尔值输出 10(默认)

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::fixedstd::hex,但是,在 std::ios 中,会写成 std::ios::fixedstd::ios::hex 等,在 std 后面加一个 ios