cout格式化输出
2015-04-26 20:10
507 查看
转自:http://www.cnblogs.com/walfud/articles/2047096.html
将 cout 的 flag 保存到变量, 以便修改后的恢复
将 bool 值以 literals 输出
一旦我们使用 boolalpha 将改变 cout 对 bool 值的输出格式. 此后的 cout 都会将 bool 输出为 literals.
将 bool 值以 numeric 输出
从此以后, cout 对 bool 值的输出将恢复 numeric 格式
指定 Integral Values 的 Base
如 boolalpha 一样, oct, dec, hex 也是 persistent. 一旦改变, 将影响后续的输出格式.
显示表明 Integer Values 的 Base
![](http://common.cnblogs.com/images/copycode.gif)
![](http://common.cnblogs.com/images/copycode.gif)
若想改变16进制字母的大小, 可以结合 uppercase/nouppercase
showbase 与 noshowbase 的作用周期也是 persistent
对于 float/double 型, 有三种格式化控制
一: 输出精度 precision : by default is 6 pricision
控制了至多一共会输出多少个数字.
当要输出的数字多余指定的值时, 将发生 四舍五入(rounded);
当要输出的数字少于指定的值时, 则实际输出的数字个数将少于指定值.
二: 表现形式 notation : 'very large and very small values are printed using
scientific notation. other values use fixed decimal.'
notation 控制了输出的形式 : 科学计数法(scientific) 和 定点小数(fixed)
恢复到初始状态
三: 输出十进制浮点 'By default, when the fractional part of a floating-point value is 0, the decimal point is not displayed. The
showpoint manipulator forces the decimal point ot be printed.'
输出填充 Padding the Output
setw to specify the
minimum space for the next numeric or string value.
![](http://pic002.cnblogs.com/images/2011/282341/2011051520540965.png)
left to left-justify the output.
![](http://pic002.cnblogs.com/images/2011/282341/2011051520570056.png)
right to right-justify the output. Output is right-justified bu default.
![](http://pic002.cnblogs.com/images/2011/282341/2011051520582023.png)
internal controls placement of the sign on negative value.
internal left-justifies the sign and right-justifies the value, padding any intervening space with blanks.(if
setfill not set)
![](http://pic002.cnblogs.com/images/2011/282341/2011051521040668.png)
setfill lets us specify an alternative character to use when padding the output. By default, the value is a space.
![](http://pic002.cnblogs.com/images/2011/282341/2011051521054047.png)
Header Files
Manipulators Defined in <iomanip>
将 cout 的 flag 保存到变量, 以便修改后的恢复
ostream::fmtflags old = cout.flag() ; // 无参将返回当前 flag 值 cout.flag(old) ; // 恢复到原先保存的值
将 bool 值以 literals 输出
cout <<"numeric : " <<true <<" or " <<false <<endl ; // 1 or 0 cout <<"literals : " <<boolalpha <<true <<" or " <<false <<endl ; // true or false cout <<"literals : " <<boolalpha <<0 <<endl ; // 0 原因: 0 在cout中不等价于 false
一旦我们使用 boolalpha 将改变 cout 对 bool 值的输出格式. 此后的 cout 都会将 bool 输出为 literals.
将 bool 值以 numeric 输出
cout <<"numeric : " <<noboolalpha <<true <<" or " <<false <<endl ;// 1 or 0
从此以后, cout 对 bool 值的输出将恢复 numeric 格式
指定 Integral Values 的 Base
const int ival = 17 ; // 'ival' is constant, so value never change cout <<"oct : " <<oct <<ival <<endl ; // 21 : 8 进制 cout <<"dec : " <<dec <<ival <<endl ; // 17 : 10 进制 cout <<"hex : " <<hex <<ival <<endl ; // 11 : 16 进制 cout <<"hex : " <<hex <<17.01 <<endl ; // 17.01 : 不受影响
如 boolalpha 一样, oct, dec, hex 也是 persistent. 一旦改变, 将影响后续的输出格式.
显示表明 Integer Values 的 Base
![](http://common.cnblogs.com/images/copycode.gif)
cout <<showbase ; // Show base when printing integral values cout <<"oct : " <<oct <<ival <<endl ; // 21 : 8 进制 cout <<"dec : " <<dec <<ival <<endl ; // 017 : 10 进制 cout <<"hex : " <<hex <<ival <<endl ; // 0x11 : 16 进制 cout <<"hex : " <<hex <<17.01 <<endl ; // 17.01 : 不受影响 cout <<noshowbase ; // Reset state of the stream
![](http://common.cnblogs.com/images/copycode.gif)
若想改变16进制字母的大小, 可以结合 uppercase/nouppercase
cout <<showbase <<uppercase ; cout <<"hex : " <<hex <<15 <<endl ; // 0XF 大写形式 cout <<nouppercase ; cout <<"hex : " <<hex <<15 <<endl ; // 0xf 小写形式
showbase 与 noshowbase 的作用周期也是 persistent
对于 float/double 型, 有三种格式化控制
一: 输出精度 precision : by default is 6 pricision
控制了至多一共会输出多少个数字.
当要输出的数字多余指定的值时, 将发生 四舍五入(rounded);
当要输出的数字少于指定的值时, 则实际输出的数字个数将少于指定值.
// cout.pricision(4) ; // 等价于 cout <<setprecision(4) ; cout <<setprecision(4) <<12.345678 <<endl ; // 12.35 rounded! cout <<setprecision(10) <<12.345678 <<endl ; // 12.345678 其实内部发生了 rounded, 而结果正好进位, 与原值相同 cout <<cout.precision() <<endl ; // 输出当前精度
二: 表现形式 notation : 'very large and very small values are printed using
scientific notation. other values use fixed decimal.'
notation 控制了输出的形式 : 科学计数法(scientific) 和 定点小数(fixed)
float f = 101 / 6.0 ; cout <<fixed <<f <<endl ; // 16.83334 : 小数点后共6位 cout <<scientific <<f <<endl ; // 1.683333e+001 : 小数点后共6位
恢复到初始状态
cout.unsetf(ostream::floatfield) ; // Retrieve to default handling for notation cout <<f <<endl ; // 16.8333 : 所有数字共6位
三: 输出十进制浮点 'By default, when the fractional part of a floating-point value is 0, the decimal point is not displayed. The
showpoint manipulator forces the decimal point ot be printed.'
cout <<10.0 <<endl ; // 10 cout <<showpoint <<10.0 <<endl ; // 10.0000 cout <<noshowpoint <<endl ; // Revert to default handling of decimal
输出填充 Padding the Output
setw to specify the
minimum space for the next numeric or string value.
cout <<setw(10) <<12.3 <<endl ; // ______12.3 cout <<setw(10) <<12 <<3 <<endl ; // ________123 cout <<setw(3) <<12.345 <<endl ; // If the total output is more than 3, it can be extended
![](http://pic002.cnblogs.com/images/2011/282341/2011051520540965.png)
left to left-justify the output.
cout <<left ; // left-justify cout <<setw(5) <<12 <<setw(5) <<34 <<endl ; // 12___34___
![](http://pic002.cnblogs.com/images/2011/282341/2011051520570056.png)
right to right-justify the output. Output is right-justified bu default.
cout <<right ; // By default cout <<setw(5) <<12 <<setw(5) <<34 <<endl ; // 12___34___
![](http://pic002.cnblogs.com/images/2011/282341/2011051520582023.png)
internal controls placement of the sign on negative value.
internal left-justifies the sign and right-justifies the value, padding any intervening space with blanks.(if
setfill not set)
cout <<internal ; // By default cout <<setw(5) <<-12 <<endl ; // 12___34___
![](http://pic002.cnblogs.com/images/2011/282341/2011051521040668.png)
setfill lets us specify an alternative character to use when padding the output. By default, the value is a space.
cout <<setfill('*') ; // By default cout <<setw(5) <<12 <<endl ; // 12___34___
![](http://pic002.cnblogs.com/images/2011/282341/2011051521054047.png)
Header Files
Manipulators Defined in <iomanip>
setfill(char ch) Fill whitespace with 'ch' setprecision(int n) Set floating-point precision to 'n' setw(int w) Read or write value to 'w' characters setbase(int b) Output integers in base 'b'(only 'b' is 8/10/16 could the function work)