C++中大多数改变格式状态的操纵符都是设置/复原成对的;一个用来将格式设置为一个新值,另一个用来复原,恢复为正常的默认格式。
改变布尔值的格式:
cout << true << endl;//输出1
cout << false << endl;//输出0
这是没有改变的,输出布尔类型的时候不会直接输出 true 和 false 而把它们转换成 int型输出。
我们可以利用 boolalpha 和 noboolalpha 来改变打印它的格式。
cout << boolalpha;//改变打印bool 值的方式,后面所有打印布尔类型值的时候都会打印 true 或者 false
cout << true << endl;//输出字符串 true
cout << false << endl;//输出字符串 falsr
cout << noboolalpha;//这里恢复原来默认的打印 bool 值的格式
cout << true << endl;//输出1
我们在默认打印格式的基础上直接写 noboolalpha 的话还是打印 0 或者 1 不会改变。
改变整形值的进制:
默认情况下,输入输出都是使用十进制。
我们可以使用 hex (十六进制), oct (八进制) , dec(十进制) 改变它们的进制。
int i = 10;
cout << i << endl;//输出10
cout << oct <<i<< endl;//输出12
cout << hex << i << endl;//输出 a
cout << dec << i << endl;//输出 10
它们只能改变整形值,它们的使用和 boolalpha 的一样,它们会影响之后所有的输出,直到另一个操作符又改变了格式为止。
在输出中指出进制:
使用 showbase 操纵符会输出结果中显示进制。
int i = 10;
cout << showbase;//打印时显示进制 以0x开头表示十六进制 ; 0 开头表示 八进制 ; 没有前导符表示 十进制
cout << oct <<i<< endl;//输出 012
cout << hex << i << endl;//输出 0xa
cout << dec << i << endl;//输出 10
cout << noshowbase;//恢复默认状态
默认十六进制会以小写打印。可以使用 uppercase 来输出大写:
cout << uppercase<<hex << i << endl;//输出 0XA
控制浮点数格式:
默认情况下浮点值会打印六位精度,如果没有小数部分,则不打印小数点。
通过 precision 或 setprecision (定义在头文件 iomanip 中)来改变精度。
double i = 3.141526;
cout << cout.precision() << endl;//返回当前精度值是多少
cout.precision(12);//设置打印精度
cout << sqrt(1.1) << endl;//输出 1.04880884817 12位
cout<<i<< endl;//输出 3.141526
cout << i << endl;//输出 3.141526
cout << setprecision(3);//也可以通过这个来设置打印精度 定义在头文件 iomanip中
cout << i << endl;//输出3.143
//sqrt 函数是重载的,接受不同的版本,它定义在头文件 cmath中, 返回实参的平方根。
记数法和强制打印小数点:
double i = 3.141526;
cout.precision(12);
cout<<scientific<<i<< endl;//输出 3.141526000000e+00 使用科学记数法表示
cout <<fixed<< i << endl;//输出 3.141526000000 使用定点十进制
cout << defaultfloat; //将流恢复到默认状态
cout << i << endl;//输出 3.141526
//打印小数点
cout << 10.0000 << endl;//输出 10
cout << showpoint << 10.0000 << noshowpoint << endl; //输出 10.0000000000
以下图片来自 《C++ primer》:
cout << setfill('#') << setw(12) << 100<<setw(12 ) << 78<<'\n'; //输出 #########100##########78
操作符 noskipws 会让输入运算符读取空白符,而不是跳过它们。恢复默认状态用 skipws。
今天的分享就到这里了!给个关注不迷路,一起成长...