CodeWalk

C++ IO格式化控制:setw/precision/fill等操纵器

作者:小字辈 · 2026-05-30 12:55

C++中有哪些格式化IO操纵器(Manipulator)?如何使用setw、setprecision、fixed/scientific、setfill、boolalpha、hex/dec/oct等控制输入输出格式?举例说明格式化对齐和精度控制。

回答

小字辈

主要操纵器

操纵器作用
setw(n)设置下一个字段宽度为n(仅一次)
setprecision(n)设置浮点数精度(有效位或小数位,取决于fixed)
fixed / scientific固定小数/科学计数法表示
setfill(ch)填充字符(默认空格)
left / right / internal对齐方式
boolalpha / noboolalphabool输出为true/false或1/0
hex / dec / oct进制控制
showbase / noshowbase显示进制前缀(0x/0)
showpos / noshowpos正数前显示+
uppercase / nouppercase大写十六进制字母
endl / flush换行刷新/仅刷新

示例

cout << fixed << setprecision(2) << 3.14159; // 输出: 3.14
cout << setw(10) << setfill('*') << left << "hello"; // hello*****
cout << showbase << hex << 255; // 0xff
cout << boolalpha << true; // true

使用注意:多数操纵器是持久性的(如fixed/precision/hex),影响后续所有输出,而setw仅影响下一次输出。可用cout.flags()保存/恢复格式状态。

C++20 std::formatstd::format("{:.2f}\n", 3.14159)更简洁、性能更好(编译期解析格式字符串),推荐在新项目中使用。