今天做C++的高精度的时候发现高精度的模板输出使用到了cout.width()和cout.fill()以便把每个单元存放的四位数字输出
于是就去查找了一下关于cout.width()和cout.fill()的相关信息
关于cout.width():
a、控制符int width()将用来调整字段的宽度,因为width是成员函数,所以要通过对象来调用,比如cout.width()将显示当前的字段宽度,默认为0,而cout.width(3)将把字段宽度设定为3。
注意C++容纳字段的方式为给字段分配刚好合适的宽度来容纳字段,所以C++中默认的字段宽度为0,以适合于所有的字段。
b、width的默认对齐方式为右对齐,即如果cout.width(12)如果字段没有这么宽,则将在字段的左边填以空格来达到12个字段的宽度。
c、还要注意的是width只影响他设置后的下一个输出,再下一个字段输出后,后继的字段被恢复为默认值,比如cout.width(12); cout<<2<<3;则输出2时会以12字段的宽度显示,但显示3时就会以默认的方式显示了。
d、int width()调用他时将会反回上一次的字段宽度的值。
关于cout.fill():
成员函数fill()可以用来改变填充的字符,比如cout.fill(‘*'),使用*填充空白部分。
但是千万要注意:fill函数在设置后将一直有效,除非被重新设定。这一点与width()十分不同。width只影响他设置后的下一个输出,再下一个字段输出后,后继的字段被恢复为默认值0.
而且cout.fill('*')会返回设置'*'之前的fill字符' ' 所以如果用cout<<cout.fill('*')就会输出这个空格
所以下面这个程序的输出结果是:
123456789
******* 123 //(注意星号和数字之间还有一个空格)
#include <iostream>using namespace std;void main(){cout<<"123456789"<<endl;cout.width(8);cout<<cout.fill('*')<<123<<endl;}
C++中还有一个setw()与cout.width()的功能类似
这两个函数的作用是一样的。都是控制输出字符域宽度的,且不足用空格填充。在C++中,setw(int n)用来控制输出间隔。
例如: cout<<'s'<<setw(8)<<'a'<<endl;
则在屏幕显示
s a
s与a之间有7个空格,setw()只对其后面紧跟的输出产生作用,如上例中,表示'a'共占8个位置,不足的用空格填充。
若输入的内容超过setw()设置的长度,则按实际长度输出。
setw()默认填充的内容为空格,可以setfill()配合使用设置其他字符填充。
比如cout.fill('*'); 之后 cout<<’s'<<setw(8)<<'a'<<endl;就输出 s*******a,s与a之间有7个星号
使用setw(n)设置输出宽度时,默认为右对齐。若想让它左对齐的话,只需要插入 std::left,同理,右对齐只要插入 std::right,不过右对齐是默认状态,不必显式声明。
在c++中 以下函数可互用:
setw 或 width()
setfill 或 fill()
setprecision 或 precision()
其中前面的set* 需要头文件 #include<iomanip>
还有一些其他的格式控制,这里只是提一下:
ios::dec 以10进制表示整数
ios::hex 以16进制表示整数
ios::oct 以8进制表示整数
setfill(*) 设填充字符为*
setprecision(n) 设显示小数精度为n位
setw(n) 设域宽为n个字符
setiosflags(ios::fixed) 固定的浮点显示
setiosflags(ios::scientific) 指数表示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::skipws) 忽略前导空白
setiosflags(ios::uppercase)16进制数大写输出
setiosflags(ios::lowercase)16进制数小写输出
ios::dec 以10进制表示整数
ios::hex 以16进制表示整数
ios::oct 以8进制表示整数
ios::showbase 为整数添加一个表示其进制的前缀
ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐
ios::left 在串的末尾插入填充字符以使串居左对齐
ios::right 在串的前面插入填充字符以使串居右对齐
ios::boolalpha 将bool类型的值以true或flase表示,而不是1或0
ios::fixed 将符点数按照普通定点格式处理(非科学计数法)
ios::scientific 将符点数按照科学计数法处理(带指数域)
ios::showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)
ios::showpos 强制在正数前添加+号
ios::skipws 忽略前导的空格(主要用于输入流,如cin)
ios::unitbuf 在插入(每次输出)操作后清空缓存
ios::uppercase 强制大写字母