C++输入输出的格式控制
<上一节
下一节>
C++在类ios中提供格式化输入输出。
格式控制符定义为公有的无名的枚举类型:
enum{
skipws=0x0001, //跳过输入中的空白字符
left=0x0002, //输出左对齐
right=0x0004, //输出右对齐
internal=0x0008, //在输出符号或数制字符后填充
dec=0x0010, //在输入输出时将数据按十进制处理
oct=0x0020, //在输入输出时将数据按八进制处理
hex=0x0040, //在输入输出时将数据按十六进制处理
showbase=0x0080, //在输出时带有表示数制基的字符
showpoint=0x0100, //输出浮点数时,必定带小数点
uppercase=0x0200, //输出十六进制,用大写
showpos=0x0400, //输出正数时,加”+”号
scientific=0x0800, //科学数方式输出浮点数
fixed=0x1000, //定点数方式输出实数
unitbuf=0x2000, //插入后,立即刷新流
stdio=0x4000 //插入后,立即刷新stdout和stderr
}
该枚举量说明中的每一个枚举量,实际对应两字节数据(16位)中的一个位,所以可以同时采用几个格式控制,只要把对应位置1即可,这样既方便又节约内存。
取多种控制时,用或“|”运算符来合成,合成为一个长整型数,在ios中为:
protected:
long x_flags;
int x_precision; //标志浮点数精度,默认为6位
int x_width; //输出域宽,默认域宽为0,
//重设域宽只对其后第一输出项有效,如域宽不足,则不受限制
char x_fill; //标志域宽有富余时填入的字符
【例9.1】整型数输出。(查看源码)
【例9.2】浮点数输出。(查看源码)
注意,绝大多数流操作子仅适用于新的C++标准流类库(头文件不带.h),常用流操作子如下表所示。
cin,cout和clog都是缓冲流。对输出而言,仅当输出缓冲区满才将缓冲区中的信息输出,对输入而言,仅当输入一行结束,才开始从缓冲区中取数据,当希望把缓冲区中的信息立即输出,可用flush,加endl也有同样功能,回车并立即显示,不必等缓冲区满(endl清空缓冲区)。
【例9.2_1】采用流操作子的浮点数输出。(查看源码)
格式控制符
使用格式控制符,可以进行格式化输入输出。这些格式对所有文本方式的输入输出流均适用。格式控制符定义为公有的无名的枚举类型:
enum{
skipws=0x0001, //跳过输入中的空白字符
left=0x0002, //输出左对齐
right=0x0004, //输出右对齐
internal=0x0008, //在输出符号或数制字符后填充
dec=0x0010, //在输入输出时将数据按十进制处理
oct=0x0020, //在输入输出时将数据按八进制处理
hex=0x0040, //在输入输出时将数据按十六进制处理
showbase=0x0080, //在输出时带有表示数制基的字符
showpoint=0x0100, //输出浮点数时,必定带小数点
uppercase=0x0200, //输出十六进制,用大写
showpos=0x0400, //输出正数时,加”+”号
scientific=0x0800, //科学数方式输出浮点数
fixed=0x1000, //定点数方式输出实数
unitbuf=0x2000, //插入后,立即刷新流
stdio=0x4000 //插入后,立即刷新stdout和stderr
}
该枚举量说明中的每一个枚举量,实际对应两字节数据(16位)中的一个位,所以可以同时采用几个格式控制,只要把对应位置1即可,这样既方便又节约内存。
取多种控制时,用或“|”运算符来合成,合成为一个长整型数,在ios中为:
protected:
long x_flags;
配合使用的格式控制标志
protected:int x_precision; //标志浮点数精度,默认为6位
int x_width; //输出域宽,默认域宽为0,
//重设域宽只对其后第一输出项有效,如域宽不足,则不受限制
char x_fill; //标志域宽有富余时填入的字符
【例9.1】整型数输出。(查看源码)
【例9.2】浮点数输出。(查看源码)
流操作子(setiosflags stream manipulator)
流格式控制成员函数的使用比较麻烦,可改用流操作子(Setiosflags Stream Manipulator)。例如setw()等,可代替流类中的格式控制成员函数。注意,绝大多数流操作子仅适用于新的C++标准流类库(头文件不带.h),常用流操作子如下表所示。
cin,cout和clog都是缓冲流。对输出而言,仅当输出缓冲区满才将缓冲区中的信息输出,对输入而言,仅当输入一行结束,才开始从缓冲区中取数据,当希望把缓冲区中的信息立即输出,可用flush,加endl也有同样功能,回车并立即显示,不必等缓冲区满(endl清空缓冲区)。
【例9.2_1】采用流操作子的浮点数输出。(查看源码)
<上一节
下一节>