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::basefield | ios_base::dec | 使用基数10 |
同上 | ios_base::oct | 使用基数8 |
同上 | ios_base::hex | 使用基数16 |
ios_base::floatfield | ios_base::fixed | 使用定点计数法 |
同上 | ios_base::scientific | 使用科学计数法 |
ios_base::adjustfield | ios_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); //不显示末尾小数点