C++的cout格式化输出
发布时间:2025-07-08 00:18       
C++ cout
格式化输出终极指南
cout
的格式化控制是 C++ I/O 的核心技能,直接影响数据呈现的精确性与可读性。本文将系统讲解流操作符、成员函数及 C++20 format
库三大方法,涵盖数字精度、对齐、进制转换等高频需求。
一、基础流操作符控制
1. 数字进制转换
#include <iostream>
#include <iomanip>
using namespace std;
int num = 255;
cout << dec << num << endl; // 十进制 → 255
cout << hex << num << endl; // 十六进制 → ff
cout << oct << num << endl; // 八进制 → 377
重置进制:
cout << hex << num;
cout << dec; // 必须显式切回十进制,否则后续数字全为十六进制!
2. 浮点数精度控制
double pi = 3.1415926535;
cout << fixed << setprecision(2) << pi << endl; // 固定小数位 → 3.14
cout << scientific << pi << endl; // 科学计数法 → 3.14e+00
⚠️ 陷阱:setprecision(n)
在 fixed
模式下控制小数位,否则控制总位数:
cout << setprecision(3) << 12.345; // 输出 12.3(非fixed模式)
二、<iomanip>
库高级格式化
1. 字段宽度与填充
cout << setw(10) << left << "ID" << setw(8) << right << 100 << endl;
// 输出:ID__________100 (_代表空格)
setw(n)
:设置下一个输出项的宽度(临时生效)left
/right
/internal
:左/右/符号位对齐setfill(char)
:填充字符(默认空格)
2. 布尔值文本输出
cout << boolalpha << true << endl; // 输出 true
cout << noboolalpha << true; // 恢复为 1
3. 格式化标志位控制
标志 | 作用 | 示例 |
---|---|---|
showpos |
正数显示+号 | +42 |
uppercase |
十六进制字母大写 | 0XFF 而非 0xff |
showbase |
显示进制前缀 | 0xFF (hex) |
cout << showpos << uppercase << showbase << hex << 255;
// 输出:+0XFF
三、C++20 std::format
现代方法
C++20 引入的 <format>
库提供更简洁的 Python 风格格式化:
#include <format>
#include <iostream>
double price = 99.95;
// 类型安全、位置参数支持
cout << format("价格: {:>10.2f} 元", price) << endl;
// 输出:价格: ______99.95 元
格式说明符详解:
{:[填充][对齐][符号][#][0][宽度][精度][类型]}
- 对齐:
<
(左)、>
(右)、^
(居中) - 类型:
d
(整型)、f
(浮点)、x
(十六进制) - 示例:
cout << format("{:*^10}", "HELLO"); // **HELLO*** cout << format("{:+05d}", 42); // +0042
四、实战场景解决方案
场景1:表格数据对齐输出
cout << left << setw(15) << "产品" << setw(8) << "价格" << endl
<< setw(15) << "手机" << fixed << setprecision(2) << setw(8) << 5999.5 << endl
<< setw(15) << "耳机" << setw(8) << 899.0 << endl;
输出:
产品 价格
手机 5999.50
耳机 899.00
场景2:内存地址格式化
int var;
cout << "地址: 0x" << hex << setw(8) << setfill('0') << (long)&var;