c++预定义类型输入输出的格式控制

来源:互联网 发布:中国象棋网络高手 编辑:程序博客网 时间:2024/06/06 05:37

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;}



原创粉丝点击