使用插入运算符和控件布局
本主题演示如何控件的布局和如何创建插入运算符拥有类。 插入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';
}
}
Output
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;
}
Output
宽度 成员函数声明。 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 操控器关闭左对齐标志。 不同 宽度 和 setw, setiosflags 和 resetiosflags 的效果是永久性的。
精度
浮点精度的默认值是六。 例如, 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 用例,如果 大写 标志明确 (默认值);否则,其显示为大写。 默认的基数为 十二月 (十进制)。