插入运算符(<<)
为所有标准C++数据类型预先设计的,用于传送字节到一个输出流对象
包含头文件"#include<iomanip>"
普通操纵符:
插入运算符与操纵符一起工作
很多操纵符都定义在ios_base类中
①dec、oct和hex操纵符,分别代表十进制,八进制和十六进制,使用方法:cout<<oct<<x<<endl;
- cin>>hex>>a 相当于scanf("%x", &a);
- cout<<hex<<a 相当于printf("%x", a);
②setw()和width()操纵符:用于设置对齐
- setw()使用方法:cout<<setw(8)<<x<<endl 相当于printf("%8d\n", x),下同
- width()使用方法:cout.width(1); cout<<x<<endl
- 无论是setw()还是width(),都仅影响紧随其后的输出项,不持久
③setfill('0'):用于补0
- cout<<setfill('0')<<setw(8)<<15<<endl 相当于printf("%08d\n", x)
setiosflags操纵符:
setiosflags的参数是该流的格式标志值,可用按位或"|"运算符进行组合
不同于上面的普通操纵符,setiosflags操纵符带来的效果是持久的,关闭需要resetiosflags操纵符
引用时必须包括ios_base::前缀
例如cout<<setiosflags(ios_base::right),在执行该语句后后面所有输出全部左对齐,直到执行resetiosflags(ios_base::left)为止
常用的setiosflags操纵符:
- ios_base::skipws 在输入中跳过空白
- ios_base::left:左对齐值,用填充字符填充右边
- ios_base::right:右对齐值,用填充字符填充左边(默认对齐方式)
- ios_base::internal:在规定的宽度内,指定前缀符号之后,数值之前,插入指定的填充字符
- ios_base::dec:以十进制形式格式化数值(默认进制)
- ios_base::oct:以八进制形式格式化数值
- ios_base::hex:以十六进制形式格式化数值
- ios_base::showbase:插入前缀符号以表明整数的数制
- ios_base::showpoint:对浮点数值显示小数点和尾部的0
- ios_base::uppercase:对于十六进制数值显示大写字母A到F,对于科学格式显示大写字母E
- ios_base::showpos:对于非负数显示正号(“+”)
- ios_base::scientific:以科学格式显示浮点数值
- ios_base::fixed:以定点格式显示浮点数值(没有指数部分)
- ios_base::unitbuf:在每次插入之后转储并清除缓冲区内容
精度:
- 浮点数输出精度的默认值是6,例如:3466.98
- 要改变精度:setprecision操纵
- 如果不指定fixed或scientific,精度值表示有效数字位数
- 如果设置了iosbase::fixed或iosbase::scientific精度值表示小数点之后的位数
#include<iostream>
#include<iomanip>
using namespace std;
double v[5] = {1.23, 35.37, 653.7, 4356.288};
int main(void)
{
int i, x;
cin>>hex>>x;
cout<<dec<<x<<endl; //输入A输出10
cout<<setiosflags(ios_base::right);
cout<<setiosflags(ios_base::fixed);
for(i=0;i<=3;i++)
{
//cout.width(10);
if(i==2)
{
cout<<resetiosflags(ios_base::right); //关闭右对齐,开启左对齐
cout<<setiosflags(ios_base::left);
}
cout<<setw(10)<<setprecision(3)<<v[i]<<endl;
}
return 0;
}