C++中cout.setf()函数

使用输入流 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值