上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C++提供了在输入输出流中使用的控制符(有的书中称为操纵符),见书中表3.1。 需要注意的是: 如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。 举例: 输出双精度数。 double a=123.456789012345;对a赋初值 (1) cout<<a;输出: 123.456 (2) cout<<setprecision(9)<<a;输出: 123.456789 (3) cout<<setprecision(6);恢复默认格式(精度为6) (4) cout<< setiosflags(ios∷fixed);输出: 123.456789 (5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出: 123.45678901 (6) cout<<setiosflags(ios∷scientific)<<a;输出: 1.234568e+02 (7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a; 输出: 1.2346e02 下面是整数输出的例子: int b=123456;对b赋初值 (1) cout<<b;输出: 123456 (2) cout<<hex<<b; 输出: 1e240 (3) cout<<setiosflags(ios∷uppercase)<<b;输出: 1E240 (4) cout<<setw(10)<<b<<′,′<<b; 输出: 123456,123456 (5) cout<<setfill(′*′)<<setw(10)<<b;输出: **** 123456 (6) cout<<setiosflags(ios∷showpos)<<b;输出: +123456 如果在多个cout语句中使用相同的setw(n),并使用setiosflags(ios∷right),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。 例3.1 各行小数点对齐。 #include <iostream> #include <iomanip> using namespace std; int main( ) { double a=123.456,b=3.14159,c=-3214.67; cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2); cout<<setw(10)<<a<<endl; cout<<setw(10)<<b<<endl; cout<<setw(10)<<c<<endl; return 0; } 输出如下: 123.46 (字段宽度为10,右对齐,取两位小数) 3.14 -3214.67 先统一设置定点形式输出、取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。

评论