文章摘要
Deepseek-v3.2

C++ cout 格式化输出完全指南

1. 什么是 cout 格式化?

cout 是 C++ 的标准输出流,默认情况下它直接输出内容,比如:

cout << 123;  // 输出:123

但有时候我们想让输出更整齐、更美观,比如:

  • 让数字固定宽度(如 00123
  • 控制小数位数(如 3.14 而不是 3.1415926
  • true 显示为 "是" 而不是 1
  • 让数字右对齐,并用 * 填充空白

这些功能就是 cout 格式化,主要通过 <iomanip><ios> 头文件实现。


2. 最常用的格式化功能

(1) 设置输出宽度 setw(n)

  • 作用:控制输出的最小宽度(如果内容不够宽,会补空格或指定字符)。

  • 示例

    cout << setw(5) << 123;  // 输出:"  123"(前面补 2 个空格)

    • setw(5) 表示“最少占 5 个字符”,123 只有 3 个字符,所以前面补 2 个空格。

(2) 设置填充字符 setfill('c')

  • 作用:用指定字符填充空白(默认是空格)。

  • 示例

    cout << setfill('*') << setw(5) << 123;  // 输出:"**123"

    • setfill('*') 表示用 * 填充空白。

(3) 对齐方式 left / right

  • 作用:控制内容是左对齐还是右对齐。

  • 示例

    cout << left << setw(5) << setfill('-') << 123;  // 输出:"123--"(左对齐)
    cout << right << setw(5) << setfill('-') << 123; // 输出:"--123"(右对齐)

    • left = 左对齐,right = 右对齐(默认)。

3. 数字格式化

(1) 控制进制(十进制、十六进制、八进制)

操纵符 作用 示例 输出
dec 十进制 cout << dec << 15; 15
hex 十六进制(小写) cout << hex << 15; f
oct 八进制 cout << oct << 15; 17

示例

int num = 15;
cout << hex << num; // 输出:f(十六进制)
cout << dec << num; // 切换回十进制

(2) 显示进制前缀 showbase

  • 作用:在十六进制和八进制前加 0x0

  • 示例

    cout << showbase << hex << 15;  // 输出:0xf
    cout << showbase << oct << 15; // 输出:017

(3) 十六进制字母大写 uppercase

  • 作用:让 a-f 变成 A-F

  • 示例

    cout << uppercase << hex << 15;  // 输出:0xF(而不是 0xf)


4. 浮点数格式化

(1) 固定小数位数 fixed

  • 作用:让浮点数以固定小数位数显示。

  • 示例

    double pi = 3.1415926535;
    cout << fixed << setprecision(2) << pi; // 输出:3.14

    • setprecision(2) 表示“保留 2 位小数”。

(2) 科学计数法 scientific

  • 作用:用科学计数法显示(如 3.14e+00)。

  • 示例

    cout << scientific << pi;  // 输出:3.141593e+00

(3) 恢复默认浮点显示 defaultfloat

  • 作用:取消 fixedscientific 的效果。

  • 示例

    cout << defaultfloat << pi;  // 输出:3.14159(默认方式)


5. 布尔值格式化

(1) 显示 true/false 文本 boolalpha

  • 作用:让 true 显示为 "true"false 显示为 "false"(默认是 10)。

  • 示例

    bool isReady = true;
    cout << boolalpha << isReady; // 输出:true
    cout << noboolalpha << isReady; // 输出:1


6. 其他实用功能

(1) 显示正数的 +showpos

  • 作用:正数前面显示 +

  • 示例

    cout << showpos << 123;  // 输出:+123

(2) 强制显示小数点 showpoint

  • 作用:即使小数部分是 0,也显示小数点。

  • 示例

    cout << showpoint << 3.0;  // 输出:3.00000


7. 完整示例

#include <iostream>
#include <iomanip> // 必须包含这个头文件
using namespace std;

int main() {
int num = 255;
double pi = 3.1415926535;
bool isReady = true;

// (1) 数字进制
cout << "十六进制: " << hex << showbase << uppercase << num << "\n"; // 0xFF
cout << "十进制: " << dec << num << "\n"; // 255

// (2) 浮点数
cout << "固定小数: " << fixed << setprecision(2) << pi << "\n"; // 3.14

// (3) 布尔值
cout << "布尔值: " << boolalpha << isReady << "\n"; // true

// (4) 对齐和填充
cout << "右对齐: " << right << setw(10) << setfill('*') << 123 << "\n"; // *******123

return 0;
}

输出:

十六进制: 0XFF
十进制: 255
固定小数: 3.14
布尔值: true
右对齐: *******123

--------------------
进程退出, 总耗时 0.0307 s. 返回值: 0; CPU 时间: 15.6250 ms; 内存: 628 KB.
按任意键退出...

8. 总结

功能 代码示例 作用
设置宽度 setw(5) 控制最小输出宽度
填充字符 setfill('*') * 填充空白
左对齐 left 内容靠左
右对齐 right 内容靠右(默认)
十六进制 hex 输出十六进制
固定小数 fixed << setprecision(2) 保留 2 位小数
科学计数法 scientific 3.14e+00
布尔文本 boolalpha 显示 true/false

这些功能可以组合使用,让你的输出更整齐、更专业!