C++中的IO库(四)

地点:基地二楼

时间:2014.03.20

--------------------------------------------------------------------

一、格式化输入输出

  除了条件状态每个iostream对象还维护着格式状态控制IO的格式化细节。比如:整型值得进制、浮点值得精度、输出元素的宽度等。

1.1 用操纵符改变格式状态

  操纵符是一个函数或者对象,会影响流的状态,并能用作输入或输出运算符的运算对象。比如操纵符endl,我们可以将它“写”到输出流,就像它是一个值一样,但它不是一个普通的值,而是一个操作,用于输出一个换行符并刷新缓冲区。

  操纵符分为控制数值输出形式和控制补白数量和位置两大类。大多数改变格式状态的操纵符都是由 设置/复原 成对出现,其中复原是复原为默认格式。当操纵符改变流的格式状态时,通常改变后的状态对所有后续IO都生效。建议是最好在不需要特殊格式的时候尽快将流恢复到默认状态。


1.1.1控制布尔值的格式

  操纵符改变对象的格式状态的典型是用boolalpha操纵符控制布尔值的显示格式,默认下bool值打印为1(true)或0(false),我们可以对流使用boolalpha操纵符来覆盖这种格式。而操纵符noboolalpha则可以帮助恢复默认格式。测试程序如下:

#include<iostream>
using namespace std;
int main(){
	cout << "default bool values: " << true << " " << false << endl
		 << boolalpha 
		 <<"aopha bool valuse: " 
		 <<true << " " << false <<endl
		 <<"recover default bool values: "
		 <<noboolalpha                           //通常情况下用完后恢复默认格式
		 <<true<<" "<<false
		 <<endl;
}


1.1.2控制整型值得进制

  hex——十六进制输出

  oct——八进制输出

  dec——十进制
这些操纵符的用法和endl等一样。但要注意的是这三个只影响整型运算对象,对浮点值不受影响。


1.1.3在输出中指出进制

  默认格式状态下,在打印数值时不会显示进制,这时可使用showbase操纵符,规范如下:

  前导 0x 表示十六进

  前导 0  表示八进制

  无前导表示十进制

而noshowbase则恢复流状态,不再显示整型值得进制。提到十六进制,就涉及字母的大小写,默认格式状态是小写,我们可以使用操纵符uppercase使得字母大写,对应的nouppercase可使得字母恢复小写模式。于是类似:

cout<<nouppercase<<noshowbase<<dec<<endl;   
常用来从大写表示的十六进制恢复到默认的十进制格式状态显示。

 

1.1.4控制浮点数格式

  默认情况下,浮点值按六位数字精度打印,如果没小数部分则不打印小数部分包括小数点,根据浮点数的值选择打印成定点十进制或科学计数法形式,非常大或者非常小的值将打印成科学计数法,其他打印成定点十进制,以保证良好的可读性。

  a.指定浮点数打印精度

  精度能控制打印的数字总数,我们可以通过调用IO对象的precision成员或使用setprecision操纵符(定义在头文件iomanip中)来改变精度。precision成员函数是重载的,一个版本接受int值,能将精度设为该值,并返回旧精度值,还一个版本不接受参数,返回当前精度值,setprecision操纵符则接受一个参数用于设置精度。测试程序如下:

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	cout << "Default percision: " << cout.precision() << "Value: " << sqrt(2) << endl;
	cout << "Set 12 percision with precision function: " << cout.precision(12) << " Value: " << sqrt(2)<<endl;
	cout << "Set 3 percision with setprecision: " << setprecision(3) << "Value: " << sqrt(2) << endl;
}
好了,这个地方今天就学到吧,下次继续。。。。。。


    

C++中的IO库(四),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。