11.3饑的格式化控制 在数据的输入输出中,常常需要准确地控制数据的输入输 出格式。在C十+中,完成格式化输入输出有两种方式,一是 使用ios类中的成员函数,二是使用输入输出操作符 ios类中的成员函数: 每一个输入或输出流都有一个当前数据格式状态字 x flags(长整数),在根基类ios中定义,该字称为格式化标 志字( formatting flag),在根基类ios的派生类 istream和 ostream中可以用ios:fags加以引用。 x flags的每一位 都分别表示一种格式状态,1表示采用,0表示不采用。而 C++把所有的输入输出格式状态编码为一个枚举类型的数据 定义,该枚举是用于设置控制输入输出格式的标志使用的。枚 举类型定义如下: 心u
11.3 流的格式化控制 在数据的输入输出中,常常需要准确地控制数据的输入输 出格式。在C++中,完成格式化输入输出有两种方式,一是 使用ios类中的成员函数,二是使用输入输出操作符。 ios类中的成员函数: 每一个 输入或输出流 都有一个当前 数据格式状态 字 x_flags(长整数),在根基类ios中定义,该字称为格式化标 志字(formatting flag),在根基类ios的派生类istream和 ostream中可以用ios::x_flags加以引用。x_flags的每一位 都分别表示一种格式状态,1表示采用,0表示不采用。而 C++把所有的输入输出格式状态编码为一个枚举类型的数据 定义,该枚举是用于设置控制输入输出格式的标志使用的。枚 举类型定义如下:
113的格式化控制 格式控制符定义为公有的无名的枚举类型: enum skipws=0x0001,I//跳过输入中的空白字符 left=0X0002, o//输出左对齐 right=0x0004r o//输出右对齐 internal:=0x0008,◎//在输出符号或数制字符后填充 dec=0x0010 I/o//在输入输出时将数据按十进制处理 oct=0x0020 I/o//在输入输出时将数据按八进制处理 hex=0x0040, I/o//在输入输出时将数据按十六进制处理 showcase=0x0080,O//在输出时带有表示数制基的字符 showpoint=0x0100,O//输出符点数时必定带小数点 up percase=0x0200,O//输出十六进制用大写 showpos=0x0400,O//输出正数时,加”+号 scientific=0x0800,//科学数方式输出浮点数 fixed=0X1000, o//定点数方式输出实数 unitbuf=0x2000,o//插入后,立即刷新流的缓冲区 stdio=0x4000 o//插入后,立即刷新 stdout和 stderr
11.3 流的格式化控制 格式控制符定义为公有的无名的枚举类型: 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 }; I O O O I/O I/O I/O O O O O O O O O
11.3的格式化控制 各枚举常量的详细含义如下: (1)skipws 利用它设置对应标志后,从流中输入数据时跳过当前位置 及后面的所有连续的空白字符,从第一个非空白字符起读数, 否则不跳过空白字符。空格、制表符‘t、回车符“r'和换 行符‘n统称为空白符。默认为设置。 (2)left, right, internal left在指定的域宽内按左对齐输出, right按右对齐输出, 而 interna使数值的符号按左对齐、数值本身按右对齐输出。 域宽内剩余的字符位置用填充符填充。默认为 right设置。在 任一时刻只有一种有效。 (3) dec, oct, hex 设置dec对应标志后,使以后的数值按十进制输出,设 置oct后按八进制输出,而设置hex后则按十六进制输出。默 认为dec设置。 心u
11.3 流的格式化控制 各枚举常量的详细含义如下: (1)skipws 利用它设置对应标志后,从流中输入数据时跳过当前位置 及后面的所有连续的空白字符,从第一个非空白字符起读数, 否则不跳过空白字符。空格、制表符‘\t’、回车符‘\r’和换 行符‘\n’统称为空白符。默认为设置。 (2)left,right, internal left在指定的域宽内按左对齐输出,right按右对齐输出, 而internal使数值的符号按左对齐、数值本身按右对齐输出。 域宽内剩余的字符位置用填充符填充。默认为right设置。在 任一时刻只有一种有效。 (3)dec, oct, hex 设置dec对应标志后,使以后的数值按十进制输出,设 置oct后按八进制输出,而设置hex后则按十六进制输出。默 认为dec设置
11.3的格式化控制 (4 showcase 设置对应标志后使数值输出的前面加上“基指示符”, 八进制数的基指示符为数字0,十六进制数的基指示符为0X, 十进制数没有基指示符。默认为不设置,即在数值输出的前 面不加基指示符。 (5) showpoint 强制输出的浮点数中带有小数点和小数尾部的无效数字 0。默认为不设置。 (6) uppercase 使输出的十六进制数和浮点数中使用的字母为大写。默 认为不设置。即输出的十六进制数和浮点数中使用的字母为 小写。 (7)showpos 使输出的正数前带有正号“+"。默认为不设置。即输出 的正数前不带任何符号 心u
11.3 流的格式化控制 (4)showbase 设置对应标志后使数值输出的前面加上“基指示符” , 八进制数的基指示符为数字0,十六进制数的基指示符为0x, 十进制数没有基指示符。默认为不设置,即在数值输出的前 面不加基指示符。 (5)showpoint 强制输出的浮点数中带有小数点和小数尾部的无效数字 0。默认为不设置。 (6)uppercase 使输出的十六进制数和浮点数中使用的字母为大写。默 认为不设置。即输出的十六进制数和浮点数中使用的字母为 小写。 (7)showpos 使输出的正数前带有正号“+”。默认为不设置。即输出 的正数前不带任何符号
11.3饑的格式化控制 (8) scientific, fixed 进行 scientific设置后使浮点数按科学表示法输出,进行 fκed设置后使浮点数按定点表示法输出。只能任设其一。缺 省时由系统根据输出的数值选用合适的表示输出 (9 unitbuf, stdio 这两个常量很少使用,所以不予介绍。 该枚举量说明中每一个枚举量实际对应 x flags中的每 个位,所以可以同时采用几个格式控制,只要把对应位置1即 可,这样既方便又节约内存。取多种控制时,用或“|"运算 符来合成,合成为一个长整型数,在ios中为: protected long x flags 访问 x flags的重载函数定义如下
11.3 流的格式化控制 (8)scientific, fixed 进行scientific设置后使浮点数按科学表示法输出,进行 fixed设置后使浮点数按定点表示法输出。只能任设其一。缺 省时由系统根据输出的数值选用合适的表示输出。 (9)unitbuf, stdio 这两个常量很少使用,所以不予介绍。 该枚举量说明中每一个枚举量实际对应x_flags中的每一 个位,所以可以同时采用几个格式控制,只要把对应位置1即 可,这样既方便又节约内存。取多种控制时,用或“|”运算 符来合成,合成为一个长整型数,在ios中为: protected: long x_flags; 访问x_flags的重载函数定义如下: