C++ 标准库中的 <iomanip>
头文件提供了一些输入输出流(I/O stream)操作符,用于控制数据的格式化输出。它包含了一些操控符和格式标志,可以控制数据的显示方式,比如数字的精度、对齐方式、填充字符、宽度等。
1. 常用的操控符
1.1 std::setw(int n)
std::setw()
设置输出字段的最小宽度。如果输出的值宽度小于指定宽度,输出会使用填充字符来补齐(默认为空格)。
#include <iostream>
#include <iomanip>
int main() {
int num = 42;
std::cout << std::setw(10) << num << std::endl; // 输出: " 42"
return 0;
}
- 如果输出的内容超出了指定宽度,输出会按正常的方式进行显示,不会被截断。
1.2 std::setfill(char c)
std::setfill()
用于指定填充字符。默认情况下,std::setw()
使用空格填充,如果你希望用其他字符填充,可以使用 std::setfill()
。
#include <iostream>
#include <iomanip>
int main() {
int num = 42;
std::cout << std::setfill('*') << std::setw(10) << num << std::endl; // 输出: "******42"
return 0;
}
- 这里,数字
42
会被*
字符填充,直到达到宽度为10
的要求。
1.3 std::setprecision(int n)
std::setprecision()
设置浮点数输出的精度。它指定了数字输出时小数点后的位数。如果要控制总共的有效数字数,也可以使用该函数。
#include <iostream>
#include <iomanip>
int main() {
double num = 3.14159265359;
std::cout << std::setprecision(5) << num << std::endl; // 输出: 3.1416
return 0;
}
- 该代码会将数字
3.14159265359
输出为3.1416
,保留了小数点后 5 位。
1.4 std::fixed
和 std::scientific
std::fixed
和 std::scientific
用于控制浮点数的输出格式:
std::fixed
:将浮点数输出为定点格式,即小数点后固定的数字位数。std::scientific
:将浮点数输出为科学计数法。
#include <iostream>
#include <iomanip>
int main() {
double num = 123.456;
std::cout << std::fixed << std::setprecision(2) << num << std::endl; // 输出: 123.46
std::cout << std::scientific << std::setprecision(2) << num << std::endl; // 输出: 1.23e+02
return 0;
}
std::fixed
会输出123.46
,保留两位小数。std::scientific
会将其转换为1.23e+02
。
1.5 std::left
, std::right
, std::internal
这些操控符用于控制输出对齐方式:
std::left
:将数据左对齐。std::right
:将数据右对齐(默认)。std::internal
:将数字部分右对齐,符号或填充字符部分左对齐。
#include <iostream>
#include <iomanip>
int main() {
int num = 42;
std::cout << std::setw(10) << std::left << num << std::endl; // 输出: "42 "
std::cout << std::setw(10) << std::right << num << std::endl; // 输出: " 42"
std::cout << std::setw(10) << std::internal << num << std::endl; // 输出: " 42"
return 0;
}
1.6 std::showpoint
和 std::noshowpoint
std::showpoint
强制显示浮点数的尾数,即使尾数为 0。std::noshowpoint
关闭尾数显示。
#include <iostream>
#include <iomanip>
int main() {
double num = 1.0;
std::cout << std::showpoint << num << std::endl; // 输出: 1.00000
std::cout << std::noshowpoint << num << std::endl; // 输出: 1
return 0;
}
std::showpoint
会强制显示浮点数的小数部分,即使小数部分是零。
1.7 std::boolalpha
和 std::noboolalpha
std::boolalpha
将布尔值输出为true
或false
。std::noboolalpha
将布尔值输出为1
或0
。
#include <iostream>
#include <iomanip>
int main() {
bool flag = true;
std::cout << std::boolalpha << flag << std::endl; // 输出: true
std::cout << std::noboolalpha << flag << std::endl; // 输出: 1
return 0;
}
2. 组合使用
可以将多个格式控制符结合使用,实现更复杂的格式输出。例如,设置浮点数的精度并左对齐:
#include <iostream>
#include <iomanip>
int main() {
double num = 123.456789;
std::cout << std::setw(15) << std::left << std::setprecision(4) << std::fixed << num << std::endl;
return 0;
}
- 该代码会将浮点数
123.456789
输出为123.457
(四舍五入至小数点后 4 位),并且左对齐,宽度为 15 个字符。
3. 总结
<iomanip>
头文件提供了丰富的格式化控制,可以让你自定义输出的对齐方式、精度、填充字符等。它广泛用于控制数字和字符串在终端或文件中的显示方式。通过组合这些操控符,可以灵活地格式化输出内容。
- 常用操控符:
setw
,setfill
,setprecision
,fixed
,scientific
,left
,right
,showpoint
,boolalpha
等。 - 应用场景:报告格式输出、对齐数据表格、精确控制浮点数显示等。
希望这个总结能帮助你理解 C++ 中 <iomanip>
头文件的使用。如果有进一步的问题,欢迎随时提问!
发表回复