c++的cincout高阶格式化操作

上传人:wm****3 文档编号:43387133 上传时间:2018-06-06 格式:DOC 页数:17 大小:19.17KB
返回 下载 相关 举报
c++的cincout高阶格式化操作_第1页
第1页 / 共17页
c++的cincout高阶格式化操作_第2页
第2页 / 共17页
c++的cincout高阶格式化操作_第3页
第3页 / 共17页
c++的cincout高阶格式化操作_第4页
第4页 / 共17页
c++的cincout高阶格式化操作_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《c++的cincout高阶格式化操作》由会员分享,可在线阅读,更多相关《c++的cincout高阶格式化操作(17页珍藏版)》请在金锄头文库上搜索。

1、C+C+的的 cincoutcincout 高阶格式化操作高阶格式化操作C+的 cin/cout 高阶格式化操作 时间:2010-12-12 11:41 来源: 作者: 点击:64 次这篇文章主要讲解如何在 C+中使用 cin/cout 进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离 scanf/printf,仅使用cin/cout 来完成一切需要的格式化输入输出功能(从非性能的角度而言) 。更进一这篇文章主要讲解如何在 C+中使用 cin/cout 进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等

2、。通过本文,您可以完全脱离 scanf/printf,仅使用cin/cout 来完成一切需要的格式化输入输出功能(从非性能的角度而言) 。更进一步而言,您还可以在、上使用这些格式化操作,从而代替 sscanf/sprintf 和 fscanf/fprintf 函数。为方便描述,下文仅以 cin/cout 为例进行介绍。一、综述cin/cout 是 STL 库提供的一个 iostream 实例,拥有 ios_base基类的全部函数和成员数据。进行格式化操作可以直接利用setf/unsetf 函数和 flags 函数。cin/cout 维护一个当前的格式状态,setf/unsetf 函数是在当前的

3、格式状态上追加或删除指定的格式,而 flags 则是将当前格式状态全部替换为指定的格式。cin/cout 为这两个函数提供了如下参数(可选格式):ios:dec 以 10 进制表示整数ios:hex 以 16 进制表示整数ios:oct 以 8 进制表示整数ios:showbase 为整数添加一个表示其进制的前缀ios:internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐ios:left 在串的末尾插入填充字符以使串居左对齐ios:right 在串的前面插入填充字符以使串居右对齐ios:boolalpha 将 bool 类型的值以 true 或 flase 表示,而不是

4、1 或 0ios:fixed 将符点数按照普通定点格式处理(非科学计数法)ios:scientific 将符点数按照科学计数法处理(带指数域)ios:showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)ios:showpos 强制在正数前添加+号ios:skipws 忽略前导的空格(主要用于输入流,如 cin)ios:unitbuf 在插入(每次输出)操作后清空缓存ios:uppercase 强制大写字母以上每一种格式都占用独立的一位,因此可以用“|” (位或)运算符组合使用。调用 setf/unsetf 或 flags 设置格式一般按如下方式进行:

5、1 cout.setf(ios:right | ios:hex); /设置 16 进制右对齐2 cout.setf(ios:right, ios:adjustfield); /取消其它对齐,设置为右对齐setf 可接受一个或两个参数,一个参数的版本为设置指定的格式,两个参数的版本中,后一个参数指定了删除的格式。三个已定义的组合格式为:ios:adjustfield 对齐格式的组合位ios:basefield 进制的组合位ios:floatfield 浮点表示方式的组合位设置格式之后,下面所有使用 cout 进行的输出都会按照指定的格式状态执行。但是如果在一次输出过程中需要混杂多种格式,使用 c

6、out 的成员函数来处理就显得很不方便了。STL 另提供了一套库可以满足这种使用方式。库中将每一种格式的设置和删除都进行了函数级的同名封装,比如 fixed 函数,就可以将一个 ostream 的对象作为参数,在内部调用 setf 函数对其设置ios:fixed 格式后再返回原对象。此外还提供了setiosflags、setbase、setfill、setw、setprecision 等方便的格式控制函数,下文会逐一进行介绍。大多数示例代码都会使用到,因此默认包含的头文件均为:1 #include 2 #include 二、缩进将输出内容按指定的宽度对齐,需要用到ios:right、ios:l

7、eft、ios:internal 和 iomanip 里的 setw。其中 setw 用于指定要输出内容的对齐宽度。以下两段代码的结果完全相同,前面是一个浮点数-456.98,后面紧跟着一个字符串“The End”以及换行符“endl” 。代码一:01 #include 02 #include 03 using namespace std;04 int main(void) 05 cout.flags(ios:left); /左对齐06 cout 2 #include 3 using namespace std;4 int main(void) 5 cout 的 setfill来设置填充字符,

8、比如下面的代码用字符“0”作为填充字符:1 #include 2 #include 3 using namespace std;4 int main(void) 5 cout 02 #include 03 using namespace std;04 int main(void) 05 cout.setf(ios:showpos | ios:uppercase);06 cout 的 setbase 函数同样可以设置整数的三种进制,参数分别为 8、10 和 16,但使用起来比上面的方法还更复杂一些,除非是特殊的代码规范要求(有些规范要求避免将常量直接作为表达式) ,一般不建议使用 setbase

9、。此外,还可以利用ios:showbase 来为整数的前面加一个表示进制的前缀,代码如下:1 #include 2 #include 3 using namespace std;4 int main(void) 5 cout 02 #include 03 using namespace std;04 int main(void) 05 cout.setf(ios:showbase);06 cout 的 setprecision 配合使用,可以表示指定小数点后面的保留位数(四舍五入) 。示例代码如下:01 #include 02 #include 03 using namespace std;0

10、4 int main(void) 05 cout.setf(ios:fixed);06 cout 2 #include 3 using namespace std;4 int main(void) 5 cout 库。在输入字符串时,可以利用库提供的getline 函数读取整行数据。getline 函数有两个版本,第一个版本有两个参数,第一个参数指定输入流(比如 cin) ,第二个参数指定一个 string 对象。getline 会读取屏幕上输入的字符,直到遇到换行符“n”为止;第二个版本有三个参数,前两个与第一个版本相同,第三个参数为指定的结束字符。注意,getline 不会读入默认或指定的结

11、束字符,但在调用之后读取的位置已经跳过结束字符。调用示例代码如下:01 #include 02 #include 03 #include 04 using namespace std;05 int main(void) 06 string str1, str2;07 getline(cin, str1);08 cin str2;09 cout 2 #include 3 using namespace std;4 int main(void) 5 cout 02 #include 03 #include 04 using namespace std;05 struct COMMODITY str

12、ing Name; int Id; int Cnt; double Price; ;06 int main(void) 07 COMMODITY cmd = 08 “Fruit“, 0x101, 50, 5.268,09 “Juice“, 0x102, 20, 8.729,10 “Meat“, 0x104, 30, 10.133,11 ;12 cout left setw(8) “NAME“ right setw(8) “ID“;13 cout right setw(8) “COUNT“ right setw(8) “PRICE“ endl;14 for (int i = 0; i sizeof(cmd) / sizeof(cmd0); +i) 15 cout left setw(8) cmdi.Name;16 cout right hex showbase setw(8) cmdi.Id;17 cout dec noshowbase setw(8) cmdi.Cnt;18 cout fixed setw(8) setprecision(2) cmdi.Price endl;19 20 return 0;21 结果:NAME ID COUNT PRICEFruit 0x101 50 5.27Juice 0x102 20 8.73Meat 0x104 30 10.13

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号