C++ 标准库中的 <iomanip> 头文件提供了一些输入输出流(I/O stream)操作符,用于控制数据的格式化输出。它包含了一些操控符和格式标志,可以控制数据的显示方式,比如数字的精度、对齐方式、填充字符、宽度等。

1. 常用的操控符

1.1 std::setw(int n)

std::setw() 设置输出字段的最小宽度。如果输出的值宽度小于指定宽度,输出会使用填充字符来补齐(默认为空格)。

#include &lt;iostream>
#include &lt;iomanip>

int main() {
    int num = 42;
    std::cout &lt;&lt; std::setw(10) &lt;&lt; num &lt;&lt; std::endl; // 输出: "        42"
    return 0;
}

  • 如果输出的内容超出了指定宽度,输出会按正常的方式进行显示,不会被截断。

1.2 std::setfill(char c)

std::setfill() 用于指定填充字符。默认情况下,std::setw() 使用空格填充,如果你希望用其他字符填充,可以使用 std::setfill()

#include &lt;iostream>
#include &lt;iomanip>

int main() {
    int num = 42;
    std::cout &lt;&lt; std::setfill('*') &lt;&lt; std::setw(10) &lt;&lt; num &lt;&lt; std::endl; // 输出: "******42"
    return 0;
}

  • 这里,数字 42 会被 * 字符填充,直到达到宽度为 10 的要求。

1.3 std::setprecision(int n)

std::setprecision() 设置浮点数输出的精度。它指定了数字输出时小数点后的位数。如果要控制总共的有效数字数,也可以使用该函数。

#include &lt;iostream>
#include &lt;iomanip>

int main() {
    double num = 3.14159265359;
    std::cout &lt;&lt; std::setprecision(5) &lt;&lt; num &lt;&lt; std::endl;  // 输出: 3.1416
    return 0;
}

  • 该代码会将数字 3.14159265359 输出为 3.1416,保留了小数点后 5 位。

1.4 std::fixed 和 std::scientific

std::fixed 和 std::scientific 用于控制浮点数的输出格式:

  • std::fixed:将浮点数输出为定点格式,即小数点后固定的数字位数。
  • std::scientific:将浮点数输出为科学计数法。
#include &lt;iostream>
#include &lt;iomanip>

int main() {
    double num = 123.456;
    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2) &lt;&lt; num &lt;&lt; std::endl;  // 输出: 123.46
    std::cout &lt;&lt; std::scientific &lt;&lt; std::setprecision(2) &lt;&lt; num &lt;&lt; std::endl;  // 输出: 1.23e+02
    return 0;
}

  • std::fixed 会输出 123.46,保留两位小数。
  • std::scientific 会将其转换为 1.23e+02

1.5 std::leftstd::rightstd::internal

这些操控符用于控制输出对齐方式:

  • std::left:将数据左对齐。
  • std::right:将数据右对齐(默认)。
  • std::internal:将数字部分右对齐,符号或填充字符部分左对齐。
#include &lt;iostream>
#include &lt;iomanip>

int main() {
    int num = 42;
    std::cout &lt;&lt; std::setw(10) &lt;&lt; std::left &lt;&lt; num &lt;&lt; std::endl;  // 输出: "42        "
    std::cout &lt;&lt; std::setw(10) &lt;&lt; std::right &lt;&lt; num &lt;&lt; std::endl; // 输出: "        42"
    std::cout &lt;&lt; std::setw(10) &lt;&lt; std::internal &lt;&lt; num &lt;&lt; std::endl;  // 输出: "       42"
    return 0;
}

1.6 std::showpoint 和 std::noshowpoint

  • std::showpoint 强制显示浮点数的尾数,即使尾数为 0。
  • std::noshowpoint 关闭尾数显示。
#include &lt;iostream>
#include &lt;iomanip>

int main() {
    double num = 1.0;
    std::cout &lt;&lt; std::showpoint &lt;&lt; num &lt;&lt; std::endl;  // 输出: 1.00000
    std::cout &lt;&lt; std::noshowpoint &lt;&lt; num &lt;&lt; std::endl;  // 输出: 1
    return 0;
}

  • std::showpoint 会强制显示浮点数的小数部分,即使小数部分是零。

1.7 std::boolalpha 和 std::noboolalpha

  • std::boolalpha 将布尔值输出为 true 或 false
  • std::noboolalpha 将布尔值输出为 1 或 0
#include &lt;iostream>
#include &lt;iomanip>

int main() {
    bool flag = true;
    std::cout &lt;&lt; std::boolalpha &lt;&lt; flag &lt;&lt; std::endl;  // 输出: true
    std::cout &lt;&lt; std::noboolalpha &lt;&lt; flag &lt;&lt; std::endl;  // 输出: 1
    return 0;
}

2. 组合使用

可以将多个格式控制符结合使用,实现更复杂的格式输出。例如,设置浮点数的精度并左对齐:

#include &lt;iostream>
#include &lt;iomanip>

int main() {
    double num = 123.456789;
    std::cout &lt;&lt; std::setw(15) &lt;&lt; std::left &lt;&lt; std::setprecision(4) &lt;&lt; std::fixed &lt;&lt; num &lt;&lt; std::endl;
    return 0;
}

  • 该代码会将浮点数 123.456789 输出为 123.457(四舍五入至小数点后 4 位),并且左对齐,宽度为 15 个字符。

3. 总结

<iomanip> 头文件提供了丰富的格式化控制,可以让你自定义输出的对齐方式、精度、填充字符等。它广泛用于控制数字和字符串在终端或文件中的显示方式。通过组合这些操控符,可以灵活地格式化输出内容。

  • 常用操控符setwsetfillsetprecisionfixedscientificleftrightshowpointboolalpha 等。
  • 应用场景:报告格式输出、对齐数据表格、精确控制浮点数显示等。

希望这个总结能帮助你理解 C++ 中 <iomanip> 头文件的使用。如果有进一步的问题,欢迎随时提问!