利用cout进行输出格式化,cout为ostream类,格式化方式是将值转化为文本方式输出。包括整型、字符、字符串、浮点型。
通过控制符可以修改类成员的值,修改输出的格式。(输出格式不会影响输入内容)
通用的文字是文本宽度成员函数width(),填充字符成员函数fill(),靠左靠右显示成员函数setf(ios_base::left,ios_base::adjustfield)
1数值整型
1.1修改显示时的计数系统
控制整数以十进制、八进制、十六进制显示,控制符为dec、hex、oct。
使用方式有两种,一重载插入运算符<<,二控制符实际上是函数。
cout<<dec<<hex<<oct;
dec(cout);
该设置影响后面所有的数,一直有效。
2浮点数
大都采用成员函数
2.1字段宽度、填充字符
cout.width();
cout.fill('*');
字段宽度默认为零,width()方法可以有参数也可以没有参数,都返回原来设置的资源宽度;另外,该方法只影响接下来显示的项目,然后字段宽度就会恢复默认值。
默认值为0还显示数据的原因是:C++不会截短数据,显示所有数据远比保持整洁重要,C++会扩宽字段与数据长度匹配。
fill()一直有效。
默认为靠右显示。
2.2浮点数的表示方法
浮点数点数有三种表示方法默认表示方法、定点表示方法、科学表示法
在printf中分别对应说明符“%g”、"%f"、"%e";
明显浮点数的显示方式,还影响的显示精度的显示方式、以及末位0的保留方式;默认情况下是显示6位数,末位0不显示。(注意这里是6位数不是6位小数)。
可以看书浮点数的显示方式,影响成员函数pricision()的含义。
并且定点和浮点在有小数的情况下可以达到cout.setf(ios_base::showpoint);的效果;
注意以上效果是针对浮点数的不要搞个整数也显示0和小数点,不行。要写成cout<<1.0的形式。
2.3setf()函数
setf()作为iso_base的类函数,被ostream类继承;
有两个函数原型:
fmtflags setf(fmtflags);
fmtflags setf(fmtflags,fmtflags);
(fmtflags(formatflags)是bitmask类型的typedef,在ios_base中定义,所以要加作用域限定符);
这上面两个都是一直作用的,可以用old保留下来手动还原。
ios_base::fmtflags old = cout.setf();
对应的unsetf()函数是关闭相应的状态,只需要一个参数。
2.3.1第一种
fmtflags setf(fmtflags);
前面的showpoint符号常量是第一种函数的参数;
类似的还有
ios_base::boolalpha//输入和输出bool值,显示true或false
ios_base::showbase//输出基数前缀0/0x
ios_base::showpoint//显示省略的0和小数点
ios_base::showpos//显示+
ios_base::uppercase//十六进制使用大写字母表示
bool显示的前提是要将输入识别为bool类型,cin也一样。
2.3.2第二种
第二个参数是清空对应位,第一个参数是设置对应位
第二个参数有 basefield,floatfield,adjustfield
对应的第一个参数有 dec,hex,oct,fixed,scientific,left,right,inter。
2.3.3标准控制符
可以用控制符调用setf函数、unsetf()函数;
cout<<boolalpha<<noboolalpha<<showbase<<noshowbase<<showpoint<<noshowpoint<<showpos<<noshowpos
<<uppercase<<nouppercase
<<inter<<left<<right<<dec<<hex<<oct<<fixed<<scientific;