在c++程序里面经常见到下面的头文件
#include <iomanip>
- 这里面
iomanip
的作用比较多:主要是对cin,cout
之类的一些操纵运算子,比如setfill,setw,setbase,setprecision
等等。它是I/O流控制头文件。 - 就像C里面的格式化输出一样.以下是一些常见的控制函数的:
setioflags(ios::dec)
置基数为10 相当于"%d"
ios::hex
置基数为16 相当于"%X"
ios::oct
置基数为8 相当于"%o"
setfill('*')
设填充字符为*
setprecision(n)
设显示小数精度为n位
setw(n)
设域宽为n个字符
setioflags(ios::fixed)
固定的浮点显示
setioflags(ios::scientific)
指数表示科学计数法
setiosflags(ios::left)
左对齐
setiosflags(ios::right)
右对齐
setiosflags(ios::skipws)
忽略前导空白
setiosflags(ios::uppercase)
16进制数大写输出
setiosflags(ios::lowercase)
16进制小写输出
setiosflags(ios::showpoint)
强制显示小数点
setiosflags(ios::showpos)
强制显示符号
这个控制符的意思是保证输出宽度为n。如:
cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100;` 输出结果为1 10100 (默认是右对齐)当输出长度大于3时(<<1000),`setw(3)`不起作用。
ios::dec 以10进制表示整数
ios::hex 以16进制表示整数
ios::oct 以8进制表示整数
ios::showbase 为整数添加一个表示其进制的前缀
ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐
ios::left 在串的末尾插入填充字符以使串居左对齐
ios::right 在串的前面插入填充字符以使串居右对齐
ios::boolalpha 将bool类型的值以true或flase表示,而不是1或0
ios::fixed 将符点数按照普通定点格式处理(非科学计数法)
ios::scientific 将符点数按照科学计数法处理(带指数域)
ios::showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)
ios::showpos 强制在正数前添加+号
ios::skipws 忽略前导的空格(主要用于输入流,如cin)
ios::unitbuf 在插入(每次输出)操作后清空缓存
ios::uppercase 强制大写字母
设置精度:cout<<setprecision(10) //精度为10,正常为6`
恢复为6:cout<<setprecision(6);
例子
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout<<12345.0<<endl;//输出"12345"
cout<<setiosflags(ios::fixed)<<setprecision(3)<<1.2345<<endl;输出"1.234"
cout<<setiosflags(ios::scientific)<<12345.0<<endl;//输出"1.234500e+004 "
cout<<setprecision(3)<<12345.0<<endl;//输出"1.235e+004 "
return 0;
}
作业
ex9
#include <iostream>
#include <iomanip> //不要忘记包含此头文件主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文
using namespace std;
int main()
{
double a=31.1;
cout<<setw(8)<<setfill('*')<<resetiosflags(ios::dec)<<setiosflags(ios::hex)<<setiosflags(ios::fixed)<<10<<endl;
//宽度为8 填充 清除格式化标志 设置 16进制 设置非科学计数法 之后输出10
cout<<setw(8)<<setfill('*')<<resetiosflags(ios::dec)<<setiosflags(ios::hex)<<resetiosflags(ios::fixed)<<setiosflags(ios::scientific)<<a<<endl;
//宽度8 填充 清除10进制 设置16进制 取消科学计数法 设置科学计数法 输出a
}
ex10
关于另一种输出方式不用<iosmanip>
例:cout.setw9(10)
cout.setf(ios::left);//设置左对齐
cout.width(7);//宽度为7
cout.fill('#');//填充#
cout.setf(ios::showpos);//强制加+号
#include <iostream>
using namespace std;//当不用<iomanip>
int main()
{
cout<<"第一章"<<endl;//先输出
cout<<" ";//输出一个tab
cout.setf(ios::left);//设置左对齐
cout.width(7);//宽度为7
cout<<"1.1";
cout<<"什么是c++";
cout.unsetf(ios::left);//取消左对齐 ,为右对齐
cout.fill('.');
cout.width(30);
cout<<1<<endl;
cout<<" ";//一个tab
cout.width(7);//符号位也算一个
cout.setf(ios::left);
cout.fill('#');
cout<<"1.11";
cout<<"c语言历史";
cout.unsetf(ios::left);
cout.fill('%');
cout.width(30);
cout<<58<<endl;
cout.fill('^') ;
cout<<"第二章"<<endl;
}
/*#include <iomanip>
#include <iostream>
using namespace std;
void main()
{
cout<<"第一章"<<endl;
cout<<" ";
cout<<setiosflags(ios::left)<<setw(7); //设置宽度为7,left对齐方式
cout<<"1.1";
cout<<"什么是C语言";
cout<<resetiosflags(ios::left); //取消对齐方式
cout<<setfill('.')<<setw(30)<<1<<endl; //宽度为30,填充为’.’输出
cout<<setfill(' '); //恢复填充为空格
cout<<" ";
cout<<setw(7)<<setiosflags(ios::left); //设置宽度为7,left对齐方式
cout<<"1.11";
cout<<"C语言的历史";
cout<<resetiosflags(ios::left); //取消对齐方式
cout<<setfill('.')<<setw(30)<<58<<endl; //宽度为30,填充为’.’输出
cout<<setfill(' ')<<"第二章"<<endl;
}*/
ex11
关于浮点数的格式
1.无云算子头文件
#include <iostream>//无运算子头文件
using namespace std;
int main()
{
float f=2.0/3.0,f1=0.000000001,f2=9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl;//正常输入
cout.setf(ios::showpos);//强制加+号
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpos);
cout.setf(ios::showpoint);//强制显示小数点后无效的0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpoint);
cout.setf(ios::scientific);//科学计数法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::scientific);
cout.setf(ios::fixed);//按点输出显示 精度为6所以f1为0.000000
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::fixed);
cout.precision(10);//精度为10,正常为6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.precision(6);//精度恢复为6
}
关于浮点数的格式
2.有云算子头文件
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
double f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<"\t"<<f1<<"\t\t"<<f2<<endl; //正常输出
cout<<setiosflags(ios::showpos); //强制在正数前加+号
cout<<f<<"\t"<<f1<<"\t\t"<<f2<<endl;
cout<<resetiosflags(ios::showpos); //取消正数前加+号 positive
cout<<setiosflags(ios::showpoint); //强制显示小数点后的无效0
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::showpoint); //取消显示小数点后的无效0
cout<<setiosflags(ios::scientific); //科学记数法
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::scientific); //取消科学记数法
cout<<setiosflags(ios::fixed); //按点输出显示
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::fixed); //取消按点输出显示
cout<<setprecision(10); //精度为10,正常为6
cout<<setiosflags(ios::fixed);
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<setprecision(6); //精度恢复为6
}