您的位置:首页 > 其它

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

2017-10-07 15:03 741 查看
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); //不显示末尾小数点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: