标准库定义了一组操作符来改变流的格式状态,包括控制数值的输入与输出形式以及控制补白的数量和位置,大多数改变格式状态的操作符是设置/复原成对的,当操作符改变流的格式状态时,通常改变后的状态对所有后续IO都生效。
控制布尔值的格式
默认情况下bool值打印为1或0,我们可以使用boolalpha操作符使之输出true或false,使用noboolapha可以取消这种格式状态。对于输入流也同样生效,只有输入true才能使值变为true,输入1不行。
#include <iostream>
#include <ios>
#include <iomanip> //for setprecision
using namespace std;
int main()
{
// float number = 123.456789;
// cout<<fixed<<showpoint;//use decimal form,print decimal points
// cout<<"Number is"<<setprecision(3)<<number<<endl;
// cout<<"Number is"<<setprecision(4)<<number<<endl;
cout << true << endl;
cout << false << endl;
cout << boolalpha;
cout << true << endl;
cout << false << endl;
cout << noboolalpha;
cout << true << endl;
cout << false << endl;
bool value = true;
cin >> boolalpha >> value;//只有输入true/false时,value才能从流中提取值,要是没有输入true/false,则value的值默认为false,又因为cout没有使用boolalpha,所以会输出0/1
cout << value << endl;
system("pause");
return 0;
}控制浮点数格式
默认情况下,浮点数按六位数字精度打印,如果浮点数没有小数部分则不打印小数点,根据浮点数的值选择打印成定点十进制或科学记数法形式,标准库会选择一种可读性更好的格式:非常大和非常小的值打印为科学记数形式,其它值打印为定点十进制形式。
默认情况下,精度控制打印的数字的总数,浮点值按当前精度舍入而非截断,使用precision可以获取当前流的浮点数精度值以及设置流的浮点数精度值。
#include <iostream>
#include <iomanip> //for setprecision
using namespace std;
int main(){
float number = 123.456789;
cout<<fixed<<showpoint;//use decimal form,print decimal points
cout<<"Number is"<<setprecision(3)<<number<<endl;
cout<<"Number is"<<setprecision(4)<<number<<endl;
system("pause");
return 0;
}下图为控制台输出的结果
指定整型值的进制
默认情况下,整型值的输入输出使用十进制,我们可以使用操作符hex、oct、和dec将其改为十六进制,八进制,十进制。
#include <iostream>
using namespace std;
int main()
{
cout << hex << 111 << endl;//6f
cout << oct << 111 << endl;//157
cout << dec << 111 << endl;//111
system("pause");
}输入十六进制后输出十进制。
int main()
{
int value = 100;
cin >> hex >> value;
cout << dec << value << endl;
system("pause");
}使用showbase可以显示进制,uppercase可以控制十六进制的x是否大写。
int main()
{
cout <<uppercase<< showbase;//在输出结果中显式进制,0x表示十六进制,0表示八进制
cout << hex << 111 << endl;//0X6f
cout << nouppercase;
cout << hex << 111 << endl;//0x6f
cout << oct << 111 << endl;//0157
cout << dec << 111 << endl;//111
cout << noshowbase;
cout << hex << 111 << endl;//6f
cout << oct << 111 << endl;//157
cout << dec << 111 << endl;//111
system("pause");
}
控制输入格式
默认情况下,输入运算符会忽略空白符(空格符,制表符,换行符,换纸符和回车符),使用noskipws会令输入运算符读取空白符,而不是跳过他们。
int main(){
char c;
cin >> noskipws;
while(cin >> c){
cout << c;
}
}输出空白
setw可以指定下一个输出的最小空间,如果不满则用空格填充,类似endl,setw不改变输出流的内部状态,它只决定下一个输出的大小。
setw默认使用右对齐格式,使用left和right可以修改对齐格式为左对齐和右对齐,使用internal修改对齐格式为符号左对齐,值右对齐。使用setfill可允许指定一个字符代替默认的空格来补白输出。
int main()
{
cout <<setw(16)<< -3.14156789 << endl;
cout <<left<< setw(16) << -3.14156789 << endl;
cout << right << setw(16) << -3.14156789 << endl;
cout << internal << setw(16) << -3.14156789 << endl;
cout << setfill('*') << endl;
cout << left << setw(16) << -3.14156789 << endl;
cout << right << setw(16) << -3.14156789 << endl;
cout << internal << setw(16) << -3.14156789 << endl;
system("pause");
} -3.14157
-3.14157
-3.14157
- 3.14157
-3.14157********
********-3.14157
-********3.14157
提供两张表,来查看c++输入输出的格式操作符。

京公网安备 11010502036488号