操纵符用于两大类输出控制:控制数值的输出形式以及控制补白的数量和位置,大多数改变格式状态的操纵符都是设置/复原成对的:一个操纵符用来将格式状态设置为一个新值,而另一个用来将其复原,恢复为正常默认格式。
8.2 控制布尔值的格式
通过设置boolalpha可以将bool型变量的true输出为true或将false输出为false。可以设置noboolalpha来将内部状态恢复为默认格式。
// modify boolalpha flag #include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true; std::cout << std::boolalpha << b << '\n'; std::cout << std::noboolalpha << b << '\n'; return 0; }
8.3 指定整形值的进制
默认情况是以十进制格式输出,我们可以设置不同的格式操纵符来改变输出整型值的进制。
oct:以八进制显示
hex:以十六进制显示
dec:以十进制显示
另外可以使用showbase操纵符来显式格式的前缀,8进制前有前导0,十六进制有前导0x。操纵符noshowbase恢复cout的状态,从而不再显示整型值的进制。有时候我们需要将16进制输出为大写如0X FF,可以用操纵符uppercase和nouppercase来控制流输出的大小写状态。
cout << uppercase << showbase << hex << 20 << 1024 << nouppercase << noshowbase << dec << endl;
8.4 控制浮点数格式
打印精度是通过precision成员或使用setprecision操纵符来改变。其中precision是一个重载函数,一个版本接受int参数,将精度设置为此值,并返回旧精度值。另外一个版本不接受参数,返回当前精度值。setprecision操纵符接受一个参数,用来设置精度。
用scientific用来指定科学记数法,fixed指定为定点十进制,hexfloat指定为十六进制的浮点数。defaultfloat将流恢复到默认的状态。
设置showpoint可以用来强制打印小数。
8.5 输出补白
setw:指定下一个数字或字符串的最小空间
left:表示左对齐输出。
right:表示右对齐输出,右对齐是默认格式。
internal:控制负数的符号的位置,它左对齐符号,右对齐值,用空格填满所有中间空间。
setfill:允许指定一个字符代替默认的空格来补白输出。
1 int i = -16; 2 double d = 3.14159; 3 cout << "i:" << setw(12) << i << '\n' 4 << "d:" << setw(12) << d << '\n'; 5 cout << left 6 << "i:" << setw(12) << i << '\n' 7 << "d:" << setw(12) << d << '\n'; 8 cout << right 9 << "i:" << setw(12) << i << '\n' 10 << "d:" << setw(12) << d << '\n'; 11 cout << internal 12 << "i:" << setw(12) << i << '\n' 13 << "d:" << setw(12) << d << '\n'; 14 cout << setfill('#')
除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自C++的那些事:流与IO类