c++输入输出格式的控制
(2011-06-14 21:50:12)1.有各个关标记位含义的表:
标记位 | 含义 |
boolalpha | 如开启,则输入和输出使用bool值(即Ture或False) |
showbase | 如开启,则对于输出,使用C++ 基数前缀(0,0x) |
showpoint | 如开启,则显示末尾的小数点 |
uppercase | 如开启,则对于16进制,使用大写字母;对于10进制,使用E表示法 |
showpos | 如开启,则在正数前面加上+ |
标记位 | 含义 |
dec | 如开启,则使用基数10(进行输出) |
oct | 如开启,则使用基数8 |
hex | 如开启,则使用基数16 |
fixed | 如开启,则使用定点计数法 |
scientific | 如开启,则使用科学计数法 |
left | 如开启,则使用左对齐 |
right | 如开启,则使用右对齐 |
internal | 如开启,则符号或基数前缀左对齐,值右对齐 |
标记位 | 含义 |
skipws | 如开启,则跳过输入流中的空白字符 |
unitbuf | 如开启,则每次输出操作后都会清空缓冲区 |
2.(1)setw()的用法:
setw()是给紧跟着后面的数据预定一个空间,如果该数据小于这个空间,在左边用0补齐;setw()只对紧跟在他后面的数据有效。
例如:cout<<setw(7)<<54421<<set(4)<<356<<endl;
结果:
..54421.356(注意:这里的点号代表空格。)
(2)setprecision(n)的用法:
*1.用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
*2.如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
*3.如果与setiosnags(ios::scientific)合用,可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。
例如,下面的代码分别用浮点、定点和指数方式表示一个实数:
//*********************
//** ch2_1.cpp **
//*********************
#include <iostream.h>
#include <iomanip.h> //要用到格式控制符
void main()
{
double amount = 22.0/7;
cout <<amount <<endl;
cout <<setprecision(0) <<amount <<endl
<<setprecision(1) <<amount <<endl
<<setprecision(2) <<amount <<endl
<<setprecision(3) <<amount <<endl
<<setprecision(4) <<amount <<endl;
cout <<setiosflags(ios::fixed);
cout <<setprecision(8) <<amount <<endl;
cout <<setiosflags(ios::scientific) <<amount <<endl;
cout <<setprecision(6); //重新设置成原默认设置
}
运行结果为:
3.14286
3
3
3.1
3.14
3.143
3.14285714
3.14285714e+00
该程序在32位机器上运行通过。
在用浮点表示的输出中,setprecision(n)表示有效位数。
第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:
第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待:
第3~6行输出按设置的有效位数输出。
在用定点表示的输出中,setprecision(n)表示小数位数。
第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。
在用指数形式输出时,setprecision(n)表示小数位数。
第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。
3.setfill()函数:
setfill(int _m) 随setw(int _w)一起使用 意思是在set(int _w)设定后的空格填充指定的字符。
4.
(1)cout.setf(ios::left);
(2)cout.setf(ios::right);
(3)cout.unsetf (ios::left);
第一个是设置格式为左对齐,第二个设置为右对齐,第三个取消左对齐。三者用法:当设置为右对齐之后,如果其后又设置了(3),则(3)这条代码不起作用,格式始终是右对齐,除非之后重新设置了(1)这条代码,则(1)这条代码才会改变右对齐的输出格式。