注册 登录
编程论坛 C++教室

setw、setfill、setprecision的使用问题,请高手解答,谢谢!

hibluebb55 发布于 2008-11-24 23:43, 1762 次点击
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{  
    int number=101,y;
    double z=123.456789,g=123.123123123;
    cout<<"decimal:"<<dec<<number<<endl;
    cout<<"hexadecimal:"<<hex<<number<<endl;
    cout<<"octal:"<<oct<<number<<endl;
    number=10;
    cout<<setfill('*')<<setw(2)<<number<<endl;
    cout<<setw(3)<<number<<endl;
    cout<<setw(4)<<number<<endl;
    cout<<setfill('+');
    cout<<setw(4)<<number<<endl;
     y=123456;
    cout<<setprecision(3)<<setw(3)<<y<<endl;
    cout<<setprecision(3)<<setw(3)<<z<<endl;
    cout<<setprecision(6)<<setw(3)<<z<<endl;
    cout<<setprecision(6)<<setw(3)<<g<<endl;
    cout<<setprecision(2)<<setw(3)<<g<<endl;
    cin.get();
    return 1;
    }

以上代码在DEV-C++ 5编译运行的结果(附图)让人费解,请高手具体解答一下在number赋值为10以后的显示结果,谢谢。
1 回复
#2
debroa7232008-11-25 21:12
cout<<setfill('*')<<setw(2)<<number<<endl;
由于之前设置了八进位的输出,所以输出为12,而setw(2)表示输出二位数,如果原数不足二位的用'*'填充,否则全部输出,这个规则下面沿用,直到下次调用setfill.
cout<<setw(3)<<number<<endl; //       输出三位数,不足用'*'填充   *12
cout<<setw(4)<<number<<endl; //       输出四位数,不足用'*'填充   **12
cout<<setprecision(3)<<setw(3)<<y<<endl;//同样使用八进制数,保留三位数(从高位算起),输出三位数,不足用"+"填充
cout<<setprecision(6)<<setw(3)<<z<<endl;//保留六位数,输出三位数,不足用"+"填充
cout<<setprecision(2)<<setw(3)<<g<<endl;//这个是由于二位输出不能表示百位,所以输出时用了科学计数法来表示.
总结:
setfill :  指定当数不足指定输出的位数时,多出来的高位用什么符号来代替的功能
setw:指定输出的位数,如果超过指定位数,则全部输出.
setprecision指定输出的精度,从高位起输出几个有效位.
1