使用cout进行格式化输出(2)

setf()的用法

第一个原型:

fmtflags setf(fmtflags);fmtflags是bitmask类型的typedef名。

           常量         含义
ios_base::boolalpha输入和输出bool值,可以为true或false
ios_base::showbase对于输出,使用C++基数前缀(0,0X)
ios_base::showpoint显示末尾的小数点
ios_base::uppercase对于16进制输出,使用大写字母,E表示法
ios_base::showpos在正数前面加上+
#include<iostream>

using std::cout;  using std::ios_base;  using std::endl;

int main()
{
	cout.setf(std::ios_base::boolalpha);
	bool T = true;
	cout << T << std::endl;
	cout << T << std::endl;	//测试setf是否只对下一条语句有效

	int temperature = 63;
	cout << temperature << std::endl;
	cout.setf(ios_base::showpos);
	cout << temperature << endl;
	
	double d = 3;	
	cout << d << endl;
	cout.setf(ios_base::showpoint);
	cout << d << endl;

	cout << std::hex;
	cout << temperature << endl;
	cout.setf(ios_base::showbase);
	cout << temperature << endl;
	cout.setf(ios_base::uppercase);
	cout << temperature << endl;

	system("pause");
	return 0;
}
仅当基数为10时才使用加号。C++将16进制和8进制都视为无符号


第二个原型

fmtflags setf(fmtflags, fmtflags); 接受两个参数并返回以前的设置


第二个参数第一个参数含义    
ios_base::basefieldios_base::dec使用基数10
同上ios_base::oct使用基数8
同上ios_base::hex使用基数16
ios_base::floatfieldios_base::fixed使用定点计数法
同上ios_base::scientific使用科学计数法
ios_base::adjustfieldios_base::left使用左对齐
同上ios_base::right使用右对齐
同上ios_base::internal符号或基数前缀左对齐,值右对齐
   
#include<iostream>

using std::cout;  using std::ios_base;  using std::endl;

int main()
{
	cout.setf(ios_base::left, ios_base::adjustfield);//左对齐
	cout.setf(ios_base::showpos);//在正数前面加+
	cout.setf(ios_base::showpoint);//显示末尾小数点
	cout.precision(3);

	ios_base::fmtflags old = cout.setf(ios_base::scientific, ios_base::floatfield);//科学计数法

	cout << "Left Justification:" << endl;
	long n;
	for (n = 1; n <= 41; n += 10)
	{
		cout.width(4);
		cout << n << "|";
		cout.width(12);
		cout << sqrt(double(n)) << "|" << endl;
	}

	cout.setf(ios_base::internal, ios_base::adjustfield);
	cout.setf(old, ios_base::floatfield);	//恢复

	cout << "Internal Justification:\n";
	for (n = 1; n <= 41; n += 10)
	{
		cout.width(4);
		cout << n << "|";
		cout.width(12);
		cout << sqrt(double(n)) << "|\n";
	}

	cout.setf(ios_base::right, ios_base::adjustfield);
	cout.setf(ios_base::fixed, ios_base::floatfield);
	cout << "Right Justification:\n";
	for (n = 1; n <= 41; n += 10)
	{
		cout.width(4);
		cout << n << "|";
		cout.width(12);
		cout << sqrt(double(n)) << "|\n";
	}


	system("pause");
	return 0;
}


关闭开关可以用unsetf()消除,原型如下:

void unsetf(fmtflags mask);

cout.setf(ios_base::showpoint); //显示末尾小数点

cout.unsetf(ios_base::showpoint); //不显示末尾小数点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值