1 用流成员函数进行输入输出格式控制
#include<iostream>
using namespace std;
int main()
{
cout<<"------1------\n";
cout.width(10); //设置域宽为10位
cout<<123<<endl; //输出整数123 占10位 默认右对齐
cout<<"------2------\n";
cout<<123<<endl; //输出整数123,上面的width(10)已不起作用 此时按系统默认的域宽输出(按数据实际长度输出)
cout<<"------3------\n";
cout.fill('&'); //设置填充字符’&‘
cout.width(10); //设置域宽为10位
cout<<123<<endl; //输出整数123,占10位,默认右对齐,填充字符‘&’
cout<<"------4------\n";
cout.setf(ios::left); //设置左对齐
cout<<123<<endl; //输出整数123,上面的width(10)已经不起作用,按数据实际长度输出,左对齐
cout<<"------5------\n";
cout.precision(4); //设置实数的精度为4位
cout<<123.45678<<endl; //以一般十进制小数形式输出时,有效数字为4
cout<<"------6------\n";
cout.setf(ios::fixed); //用顶点格式(小数形式)显示浮点数
cout<<123.45678<<endl; //以fixed形式输出时,小数位数占4位
cout<<"------7------\n";
cout.width(15); //设置域宽为15位
cout.unsetf(ios::fixed); //清除用顶点格式(小数形式)显示浮点数
cout.setf(ios::scientific); //用科学表示法格式(指数)显示浮点数
cout<<123.45678<<endl; //用科学表示法格式(指数)输出,小数占4位
cout<<"------8------\n";
int a=21;
cout.setf(ios::showbase); //输出整数时显示基数符号
cout.unsetf(ios::dec); //终止十进制的格式设置
cout.setf(ios::hex); //设置以十六进制输出格式
cout<<a<<endl; //以十六进制输出a
return 0;
}
分析以上程序和运行结果,可以看出:
1 在默认情况下,域宽取值为0,这个0意味着---无域宽,即数据按照自身宽度打印。
2 当用width()函数设置了域宽后,只对紧跟着它的流输出操作有效(紧跟着它的第一个输出有影响),当第一个输出完成后,域宽又恢复为默认的域宽0。
而调用precision()函数和fill()函数的设置,在程序中一直有效,除非他们被重新设置。
setf()函数设置格式后,如果想改变设置为同组的另一个状态,应当调用unsetf()函数,终止原来的设置状态,然后再设置其他状态。
3 当显示数据所需的宽度比使用ios::width()设置的宽度小时,空余的位置用填充字符来填充,默认情况下的填充字符是空格。
填充字符的填充位置由ios::left 和 ios::right规定。若设置为前者,输出数据左对齐,字符填充在右边。后者相反。
2 使用预定义的操纵符进行输入输出格式控制
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
cout<<setw(10)<<123<<567<<endl;
//设置域宽为10,之后输出123和567,它们连到了一起,说明操纵符setw只对最靠近他的输出起作作用(作用是一次性的)
cout<<123<<setiosflags(ios::scientific)<<setw(20)<<123.456789<<endl;
//首先按默认的方式输出123,之后按照浮点数的科学记数法及域宽为20输出,由于默认小数位数是6
cout<<123<<setw(10)<<hex<<123<<endl;
//首先按默认的方式输出123,之后按照域宽为10,以十六进制输出123
cout<<123<<setw(10)<<oct<<123<<endl;
//由于上一条语句使用了操纵符hex,起作用仍然保持,先输出16进制123,再输出十进制123。操纵符dec,oct,hex使用过以后,其 作用一直保持, //直到重新设置为止
//域宽不说,默认右对齐
cout<<123<<setw(10)<<dec<<123<<endl; //同上
cout<<resetiosflags(ios::scientific)<<setprecision(4)<<123.456789<<endl;
//取消浮点数的科学表示法输出后,设置小数位数为4。用setprecision操纵符设置小数 //位数后,输出结果做四舍五入处理。
cout<<setiosflags(ios::left)<<setfill('#')<<setw(8)<<123<<endl;
//数据左对齐,字符右填充
cout<<resetiosflags(ios::left)<<setfill('$')<<setw(8)<<456<<endl;
//取消数据左对齐,默认数据右对齐。
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容