您的位置:首页 > 编程语言 > C语言/C++

C++输入输出流格式控制

2015-12-01 16:22 323 查看
在输出浮点数时,C++默认的流输出数值有效位是6,所以不管数据是多少都只输出六位有效数字。可以采用setprecision(n)来控制输出流显示浮点数的数字个数。

I/O流常用控制符:

使用控制符时,需要加入头文件#include<iomanip>。C++有两种方法控制格式输出:1、用格式控制符;2、用流对象的成员函数。

使用格式控制符:

控制符作用
dec设置整数的基数为10
hex设置整数的基数为16
oct设置整数的基数为8
setbase(n)设置整数的基数为n,其中n的取值为8,10,16
setfill(c)设置填充字符,c可以是字符常量或字符变量
setprecision(n)设置实数的精度为n位。在以一般十进制形式输出时,n代表有效数字。在以fixed(固定小数位)形式和scientific(指数)形式输出时,n为小数位数。
setw(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终止已设置的输出格式状态,在括号中应指定内容。
成员函数:

流成员函数与之作用相同的控制符作用
precision(n)setprecision(n)设置实 数的精度为n位。
width(n)setw(n)设置字段宽度为n位。
fill(c)setfill(c)设置填充字符c。
setf( )setiosflags( )设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。
ubsetf( )resetiosflags( )终止已设置的输出格式状态。

dec 置基数为10 相当于"%d";hex 置基数为16 相当于"%X";oct 置基数为8 相当于"%o"。

设置格式状态的格式标志:

格式标志作用
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每次输出后清除 stdout,stderr
测试1:一个按进制输出的例子(成员函数实现)

#include <iomanip.h>
void main()
{
float f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl; //正常输出
cout<<setiosflags(ios::showpos); //强制在正数前加+号
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::showpos); //取消正数前加+号
cout<<setiosflags(ios::showpoint); //强制显示小数点后的无效0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::showpoint); //取消显示小数点后的无效0
cout<<setiosflags(ios::scientific); //科学记数法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::scientific); //取消科学记数法
cout<<setiosflags(ios::fixed); //按点输出显示
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::fixed); //取消按点输出显示
cout<<setprecision(18); //精度为18,正常为6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<setprecision(6); //精度恢复为6
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: