C++ IO格式化控制:setw/precision/fill等操纵器
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 / noboolalpha | bool输出为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::format:std::format("{:.2f}\n", 3.14159)更简洁、性能更好(编译期解析格式字符串),推荐在新项目中使用。