先从列子来看看吧:
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
int main(){
double values[]={35.36,1.23,653.7,4358.24};
string names[]={"zoot","jimmy","a1","stan"};
for(int i=0;i<4;i++)
cout<<setiosflags(ios_base::left)//设定左对齐标志。
<<setw(6)<<names[i]
<<resetiosflags(ios_base::left)// 关闭左对齐标志。
<<setw(10)<<setprecision(3)<<values[i]<<endl;
system("pause");
return 0;
}
输出:
zoot 35.4
jimmy 1.23
a1 654
stan 4.36e+003
程序中通过使用带参数的setiosflags操纵符来设置左对齐,setiosf定义在头文件iomanip中。参数ios_base::left是ios_base的静态常量,因此引用时必须包括ios_base前缀。这里需要用resetiosflags操纵符关闭左对齐标志。setiosflags不同于width和setw,他的影响是持久的,直到用resetflags重新恢复默认值为止。
setiosflags的参数是该流的格式标志值,这个值由如下掩码指定,并可用位或(|)运算符进行组合。
* ios_base::skipws在输入中跳过空白。
* ios_base::left左对齐值,用填充字符填充右边。
* ios_base::right右对齐值,用填充字符填充左边。
* ios_base::internal 在规定的宽度内,指定前缀符号之后,数值之前,插入指定的填充字符。
* ios_base::dec以十进制形式格式化数值(默认进制)。
* ios_base::oct以八进制形式格式化数值。
* ios_base::hex以十六进制形式格式化数值。
* ios_base::showpoint 对浮点数值显示小数点和尾部的0.
* ios_base::uppercase 对于十六进制数值显示大写字母A到F,对于科学格式显示大写字母E。
* ios_base::showpos对于非负数显正号(“+”)。
* ios_base::scientific以科学格式显示浮点数值。
* ios_base::fixed以定点格式显示浮点数值(没有指数部分)。
* iost_base;:unitbuf在每次插入之后转储并清除缓冲区内容。