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

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



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的探索之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值