文章目录
一.介绍manipulator
1.作用
通过与输出流对象(std::cout)结合使用,来改名输出的方式和样式,从而更好的控制输出的样式和布局,使输出结果更符合预期。
2.特点
①临时性:manipulator通过插入到输出流中来影响后续的输出,临时的改变数据输出的格式(比如字段宽度,填充字符,精度等等),但是不会改变数据的本身。
②局部性:manipulator的作用范围是全局,但是只对后续结果产生影响,如果想恢复默认的输出,则可以使用适当的操作符或者std::cout.unsetf来清理设置。
两种性质都会在下面体现。
3.头文件
#include <iomanip>
4.分类
①函数形式的流操纵符
操纵符使函数,通过调用函数并传入参数来设置相应的格式化模式。
举例:
1.std::setw(int n)
作用:设置字节宽度,如果输出字节宽度不足设置的字节宽度,则在原始数据的前面用填充字符补充(默认为空字符)
举例:
#include<iostream>
#include <iomanip>
int main()
{
int a = 0;
std::cout << std::setw(10) << a;
}
//输出: a
2.std::setfill(char a)
作用:设置填充字符为a,如果输出字节宽度不足设置的字节宽度,则在原始数据的前面用填充字符补充。
举例:
#include<iostream>
#include <iomanip>
int main()
{
int a = 0;
std::cout << std::setfill('a') << std::setw(10) << a;
}
//输出:aaaaaaaaa0
3.std::setprecision(int n)
作用:设置浮点数精度。
举例:
#include<iostream>
#include<iomanip>
int main()
{
float a = 3.145;
std::cout << std::setprecision(2) << a << std::endl;
}
//输出结果:3.1
4.std::cout.setf(输出标志位)
作用:设置输出标志位。
A.std::ios_base::fixed标志位
作用:使用定点表示法表示法表示浮点数。
举例:
#include <iostream>
#include <iomanip>
int main() {
double num = 123.456;
std::cout.setf(std::ios_base::fixed);
std::cout << num << std::endl;
return 0;
}
//输出 123.456000
B.std::ios_base::scientific标志位
作用:使用科学记数法表示浮点数
举例:
#include <iostream>
#include <iomanip>
int main() {
double num = 123.456;
std::cout.setf(std::ios_base::scientific);
std::cout << num << std::endl;
return 0;
}
//输出结果:1.234560e+02
②对象形式的流操纵符
1.set::dec(10进制)
2.set::oct(8进制)
3.set::hex(16进制)
作用:以相应进制表示某个数据。
举例:
#include <iostream>
#include <iomanip>
int main() {
int number = 255;
std::cout << std::hex << number << std::endl;
return 0;
}
5.特点分析
①临时性
以上所有的改变,只是从输出层面改变数值,也就是计算机内部不会改动相应的数据。
②局部性
对于std::setw(int n)和std::setfill(char a) 和 .set::dec 和 std::setprecision(int n),只能对<<运算符的作用有影响。
对于.std::cout.setf(输出标志位) 从声明开始到std::cout.unsetf(std::ios_base::floatfield)。
举例:
#include <iostream>
#include <iomanip>
int main() {
double num = 123.456;
std::cout.setf(std::ios_base::fixed);
std::cout << num << std::endl;
std::cout.unsetf(std::ios_base::floatfield); // 恢复默认的精度
std::cout << num << std::endl;
return 0;
}
//输出:123.456000
// 123.456