使用输入流
cin
接收一个整型数据r
表示圆的半径。然后计算出圆的面积并使用输出流
cout
输出计算结果并保留2
位小数。
#include <iostream>
#include <iomanip>
using namespace std;
#define PI 3.14
int main() {
float r;
cin>>r;
cout.setf(ios::fixed);
cout.precision(2);
cout<<PI*r*r;
return 0;
}
上面的代码里面有这样的语句
cout.setf(ios::fixed);
对此来进一步扩展:
cout.setf(ios::left,ios::adjustfield);
cout.setf(ios::showpoint,ios::showpint);
cout.setf(ios::scientific,ios::floatfield);
iostream中定义的操作符:
iomanip中定义的操作符:
setf(long, long) 的参数:
使用控制符控制输出格式
控制符作用
dec 设置整数的基数为10
hex 设置整数的基数为16
oct 设置整数的基数为8
setbase(n) 设置整数的基数为n(n只能是16,10,8之一)
setfill(c) 设置填充字符c,c可以是字符常量或字符变量
setprecision(n) 设置实数的精度为n位.在以一般十进制小数形式输出时,n代表有效数字.fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数.
setw(n) 设置字段宽度为n位.
setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示.
setiosflags(ios::scientific) 设置浮点数以科学计数法(即指数形式)显示.
setiosflags(ios::left) 输出数据左对齐.
setiosflags(ios::right) 输出数据右对齐.
setiosflags(ios::shipws) 忽略前导的空格.
setiosflags(ios::uppercase) 在以科学计数法输出E和十六进制输出字母X时,以大写表示.
setiosflags(ios::showpos) 输出正数时,给出“+”号.
resetiosflags 终止已设置的输出格式状态,在括号中应指定内容.
2.用流对象的成员控制输出格式
流成员函数与之作用相同的控制符作用
precision(n) setprecision(n) 设置实数的精度为n位.
width(n) setw(n) 设置字段宽度为n位.
fill(c) setfill(c) 设置填充字符c.
setf( ) setiosflags( ) 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同.
ubsetf( ) resetiosflags( ) 终止已设置的输出格式状态.
cout.width(10);
cout.setf(ios::hex);
3.设置格式状态的格式标志
格式标志作用
ios::left 输出数据在本域宽范围内左对齐
ios::right 输出数据在本域宽范围内右对齐
ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec 设置整数的基数为10
ios::oct 设置整数的基数为8
ios::hex 设置整数的基数为16
ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头)
ios::showpoint 强制输出浮点数的小点和尾数0
ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示
ios::showpos 输出正数时,给出“+”号.
ios::scientific 设置浮点数以科学计数法(即指数形式)显示
ios::fixed 设置浮点数以固定的小数位数显示
ios::unitbuf 每次输出后刷新所有流
ios::stdio
#include <iomanip>
#include <iostream>
using namespace std;
int main(void)
{
cout.flags(ios::left); //左对齐
cout << setw(10) << -456.98 << "The End" << endl;
cout.flags(ios::internal); //两端对齐
cout << setw(10) << -456.98 << "The End" << endl;
cout.flags(ios::right); //右对齐
cout << setw(10) << -456.98 << "The End" << endl;
return 0;
}
输出整数的格式有按不同进制数出:ios::hex(16进制)、ios::dec(10进制)、ios::oct(8进制),也可强制其输出符号(正数也加上“+”号前缀),对于16进制的输出还可配合ios::uppercase使所有字母以大写表示。代码示例如下:
#include <iomanip>
#include <iostream>
using namespace std;
int main(void)
{
cout.setf(ios::showpos | ios::uppercase);
cout << hex << setw(4) << 12 << setw(12) << -12 << endl;
cout << dec << setw(4) << 12 << setw(12) << -12 << endl;
cout << oct << setw(4) << 12 << setw(12) << -12 << endl;
cout.unsetf(ios::showpos | ios::uppercase);
cout << hex << setw(4) << 12 << setw(12) << -12 << endl;
cout << dec << setw(4) << 12 << setw(12) << -12 << endl;
cout << oct << setw(4) << 12 << setw(12) << -12 << endl;
return 0;
}
利用<iomanip>的setbase函数同样可以设置整数的三种进制,参数分别为8、10和16,但使用起来比上面的方法还更复杂一些,除非是特殊的代码规范要求(有些规范要求避免将常量直接作为表达式),一般不建议使用setbase。此外,还可以利用ios::showbase来为整数的前面加一个表示进制的前缀,代码如下:
#include <iomanip>
#include <iostream>
using namespace std;
int main(void)
{
cout << showbase << setw(4) << hex << 32 << setw(4) << oct << 32 << endl;
cout << noshowbase << setw(4) << hex << 32 << setw(4) << oct << 32 << endl;
return 0;
}
小数可分为两种格式类型,一种是定点表示“ios::fixed”(不带指数域),另一种是科学计数法表示“ios::scientific”(带指数域)。与<iomanip>的setprecision配合使用,可以表示指定小数点后面的保留位数(四舍五入)。示例代码如下:
#include <iomanip>
#include <iostream>
using namespace std;
int main(void)
{
cout.setf(ios::fixed);
cout << setprecision(0) << 12.05 << endl;
cout << setprecision(1) << 12.05 << endl;
cout << setprecision(2) << 12.05 << endl;
cout << setprecision(3) << 12.05 << endl;
cout.setf(ios::scientific, ios::floatfield);
cout << setprecision(0) << 12.05 << endl;
cout << setprecision(1) << 12.05 << endl;
cout << setprecision(2) << 12.05 << endl;
cout << setprecision(3) << 12.05 << endl;
return 0;
}
结果:
12
12.1
12.05
12.050
1.205000e+001
1.2e+001
1.21e+001
1.205e+001