使用插入运算符和控件布局

本主题演示如何控件的布局和如何创建插入运算符拥有类。 插入AMP_LTAMP_LT() 运算符,为所有标准 C++ 数据类型将预编程序,发送字节到输出流对象。 插入运算符与预定义的 “操控器时,”是更改整数参数默认窗体的元素。

您可以控制带有下列选项的格式:

  • 输出宽度

  • 对齐方式

  • 精度

  • 基数

输出宽度

对齐输出,则为每项指定输出宽度通过将 setw 操控器在流或通过调用 宽度 成员函数。 此示例宽正确对齐列中的值至少 10 个字符:

// output_width.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   double values[] = { 1.23, 35.36, 653.7, 4358.24 };
   for( int i = 0; i < 4; i++ )
   {
      cout.width(10);
      cout << values[i] << '\n';
   }
}

420970az.collapse_all(zh-cn,VS.110).gifOutput

      1.23
     35.36
     653.7
   4358.24

的前导宽添加到任何值小于 10 个字符。

若要填充字段,请使用 加载 成员函数,设置空白字符的值字段中具有指定的宽度。 默认值为空。 若要填充数字的列用星号 (,请修改了前面 循环如下所示:

for( int i = 0; i < 4; i++ )
{
   cout.width( 10 );
   cout.fill( '*' );
   cout << values[i] << endl;
}

endl 操控器替换换行符 ('\n')。 输出如下所示:

******1.23
*****35.36
*****653.7
***4358.24

为数据元素若要指定宽度在同一行中,请使用 setw 操控器:

// setw.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
using namespace std;

int main( )
{
   double values[] = { 1.23, 35.36, 653.7, 4358.24 };
   char *names[] = { "Zoot", "Jimmy", "Al", "Stan" };
   for( int i = 0; i < 4; i++ )
      cout << setw( 6 )  << names[i]
           << setw( 10 ) << values[i] << endl;
}

420970az.collapse_all(zh-cn,VS.110).gifOutput

宽度 成员函数声明。 iostream 如果使用 setw 或其他操控器的参数的,您必须包含 iomanip。 在输出字符串,在打印宽度 6 和整数字段宽度字段 10:

  Zoot      1.23
 Jimmy     35.36
    Al     653.7
  Stan   4358.24

setw宽度 不截断值。 如果格式化输出超过其宽度,整个值打印,这取决于流的精度设置。 setw宽度 只影响以下字段。 字段宽度还原到其默认行为 (必要的宽度),在一个字段打印后。 但是,其他流布局选项在直到更改。

对齐方式

为右对齐的文本的输出流默认值。 若要左对齐前面示例中的名称以及正确对齐数字,请替换 循环如下所示:

for ( int i = 0; i < 4; i++ )
   cout << setiosflags( ios::left )
        << setw( 6 )  << names[i]
        << resetiosflags( ios::left )
        << setw( 10 ) << values[i] << endl;

输出如下所示:

Zoot        1.23
Jimmy      35.36
Al         653.7
Stan     4358.24

使用具有 枚举数, setiosflags 操控器左对齐标志设置为。 此枚举数在 ios 类中定义的,因此,其引用必须包含 ios:: 前缀。 resetiosflags 操控器关闭左对齐标志。 不同 宽度setwsetiosflagsresetiosflags 的效果是永久性的。

精度

浮点精度的默认值是六。 例如, 3466.9768 打印为 3466.98。 若要更改此值打印的方式,使用 setprecision 操控器。 操控器有两个标志: 内置科学。 如果 内置 设置,该数字打印为 3466.976800。 如果 科学 设置,则输出为 3.4669773+003。

若要在用有效数字的 对齐 显示的浮点数,请替换 循环如下所示:

for ( int i = 0; i < 4; i++ )
   cout << setiosflags( ios::left )
        << setw( 6 )  
        << names[i]
        << resetiosflags( ios::left )
        << setw( 10 ) 
        << setprecision( 1 )
        << values[i] 
        << endl;

程序将打印此列表:

Zoot          1
Jimmy     4e+001
Al        7e+002
Stan      4e+003

循环之前消除科学记数法,插入此语句:

cout << setiosflags( ios::fixed );

固定表示形式,使用数字的程序中打印后小数点。

Zoot         1.2
Jimmy       35.4
Al         653.7
Stan      4358.2

如果更改 ios:: 内置 标志向 ios:: 科学,程序将打印此:

Zoot    1.2e+000
Jimmy   3.5e+001
Al      6.5e+002
Stan    4.4e+003

同样,程序中打印后的数值小数点。 如果 ios:: 内置ios:: 科学 设置,精度值在以后确定数字的数量。 如果两个未设置任何标志,精度值确定有效位的总数。 resetiosflags 操控器清除这些标志。

基数

十二月十月十六进制 操控器设置输入和输出的默认基数。 例如,在中,如果插入 十六进制 操控器到输出流中,对象确实将整数的内部数据表示转换为十六进制输出格式。 数字显示与数字 a 到 f 用例,如果 大写 标志明确 (默认值);否则,其显示为大写。 默认的基数为 十二月 (十进制)。

请参见

参考

输出流