#include <iomanip>
#include<iomanip>是C++标准库中的一个头文件,提供了用于输入/输出格式控制的函数和类。它特别适用于调整输出的对齐、填充、精度等格式。
setw()
stew
,这是一个用于操纵输出格式的函数,用于美化C++程序的输出格式,特别是在表格和对齐输出方面,属于iomanip
库的一部分。setw
代表“set width”,用于设置输出的宽度,控制输出内容在指定的宽度内对齐。
#include <iostream> #include <iomanip> int main() { int i = 7890; std::cout << std::setw(6) << i << std::endl; // 输出 " 7890",前面有两个空格以达到总宽度6 double d = 12.3456; std::cout << std::setw(8) << std::setprecision(2) << d << std::endl; return 0; }
修改一下 :原先输出错误,输出结果如下
std::setw(int n)
函数设置了接下来输出的宽度为n个字符。如果实际内容不足n个字符,会在前面或后面补充空格以达到设定的宽度,具体对齐方式取决于std::left
(左对齐,默认)、std::right
(右对齐)或std::internal
(内部对齐,主要用于数字前导零)这些操纵符的使用情况。
setfill()
setfill
是C++ <iomanip>
库中的一个操纵符,用于指定在使用其他格式控制时(如setw
)用于填充的字符,默认情况下填充的字符是空格。这对于对齐输出,特别是数字前面填充零或使用特定字符以达到固定宽度输出时非常有用。setfill
函数的基本形式是 std::setfill(char c)
,其中c
是你希望用作填充的字符。
#include <iostream> #include <iomanip> int main() { // 输出数字,宽度设置为5,不足部分用0填充 std::cout << std::setfill('0') << std::setw(5) << 42 << std::endl; // 输出:"00042" // 输出文本,宽度设置为10,不足部分用*填充 std::cout << std::setfill('*') << std::setw(10) << "Hello" << std::endl; // 输出:"*****Hello" return 0; }
第一次使用setfill('0')
设置了填充字符为0
,随后的setw(5)
指定了输出宽度为5,因此数字42
前面被填充了三个0
。第二次使用setfill('*')
设置了填充字符为*
,并在输出文本时通过setw(10)
设置了宽度为10,导致文本Hello
两侧被填充了星号以达到总宽度10。
setfill
的影响仅作用于紧随其后的输出操作,且通常与setw
一起使用以达到预期的格式效果。一旦设置了新的填充字符,它将一直生效直到再次被改变或程序结束,或者使用相应的操纵符重置格式设置。
类似函数
<iomanip>
库还提供了许多其他有用的操纵符和函数,用于控制输出格式。
- setprecision: 用于设置浮点数的输出精度。例如,
std::setprecision(2)
将浮点数的输出限制为两位小数。 - fixed: 将浮点数的输出格式设置为固定小数点表示法。
- scientific: 将浮点数的输出格式设置为科学记数法。
- hex, oct, dec: 分别用于设置输出的基数为十六进制、八进制、十进制。
- left, right, internal: 控制对齐方式。
left
使内容左对齐,right
使内容右对齐(默认),internal
在数值中控制前导填充位置,比如在数字和其前导零之间填充。 - boolalpha: 当设置后,
true
和false
将以文本形式而非数字形式输出。 - noshowpoint: 禁止在浮点数非零小数部分后显示小数点。
- showbase: 在输出整数时显示基数前缀(如在十六进制前加
0x
)。 - uppercase: 将字母转换为大写形式输出,常用于十六进制输出。
- nouppercase: 禁止转换为大写,恢复默认的小写输出。
这些操纵符通常结合使用,可以实现非常精细的输出格式控制。例如,要以十六进制、左对齐、宽度为8并以0填充的方式输出一个整数,可以这样操作:
std::cout << std::hex << std::setfill('0') << std::setw(8) << std::left << 255 << std::endl;
输出000000ff