在做acm题的时候经常遇到让我们格式化输出自己数据的问题,如果你用c语言写程序使用printf这个格式化输出就可以做到,但是如果是c++的话就不太容易了,所以我们就来看看在c++中如何实现这种格式化的输出。首先我们需要包含一个头文件叫做iomanip,这个头文件就是控制输出流的格式化的,然后我们来具体的看一下如何使用它提供的一些函数来达到我们的目的吧!

#include <iostream>
//iomanip头文件是用来控制格式化输出的
#include <iomanip>
using namespace std;

int main()
{
	//setw()是用来控制输出字符的宽度的,只作用于当前的这次输出
	cout<<setw(4)<<100<<endl;
	//setw()只作用于上次的输出,当这次再输出的时候这个宽度就不起作用了
	cout<<100<<endl;
	//以下的这种情况setw就不起作用了
	cout<<setw(3)<<1000<<endl;

	//输出的宽度为10,而字符只占了4个宽度,前边的六个宽度用@填充
	cout<<setfill('@')<<setw(10)<<1000<<endl;
	//再次使用cout输出的时候同样起作用
	cout<<setw(10)<<1000<<endl;

	//setbase()将数字转换为多少进制,只支持16,、8、10进制
	cout<<setbase(16)<<10<<endl;
	cout<<setbase(8)<<10<<endl;
	cout<<setbase(10)<<100<<endl;

	//setprecision用来控制输出的精度,就是一共有多少位
	cout<<setprecision(6)<<123.45678<<endl;
	//下一次输出的时候精度任然不变
	cout<<123.45678<<endl;
	//如果要控制小数点后边的位数可以采用如下的方法,最后一位四舍五入
	cout<<fixed<<setprecision(4)<<123.456789<<endl;
	cout<<1.23434<<endl;
	//去除格式
	cout.unsetf(ios::fixed);
	cout<<2.1<<endl;

	/*setiosflags(ios::fixed) 固定的浮点显示
	setiosflags(ios::scientific) 指数表示
	setiosflags(ios::left) 左对齐
	setiosflags(ios::right) 右对齐
	setiosflags(ios::uppercase) 16进制数大写输出
	setiosflags(ios::lowercase) 16进制小写输出
	setiosflags(ios::showpos) 强制显示符号*/
	cout<<setiosflags(ios::showpos)<<2<<endl;
	cout<<setbase(16)<<setiosflags(ios::uppercase)<<10<<endl;

	return 0;
}