我们知道,cout是ostream类的预定义对象,在ostream中,重载了操作符<<,且该操作符返回一个ostream引用。所以我们可以在一个表达式中连续重复使用该操作符:
cout<<""<<12< C++使用C中的printf()和scanf()函数进行格式化控制的同时又提供了两种格式化控制的方法: 一种是使用ios类中的有关格式控制的成员函数, 另一种是使用被称为格式控制符的特殊类型的函数。 1 有关格式控制的成员函数 一般来说,ios 类的成员函数进行格式控制主要是通过对格式状态字、域宽、填充字符和输出精度操作来完成的。 1.1 操作状态字的函数 std::cout.setf(std::ios::showpos); // turn on the std::ios::showpos flag std::cout << 27 << '\n'; std::cout.setf(std::ios::showpos | std::ios::uppercase); // turn on the std::ios::showpos and std::ios::uppercase flag std::cout << .89f << '\n'; std::cout.setf(std::ios::showpos); // turn on the std::ios::showpos flag std::cout << 27 << '\n'; std::cout.unsetf(std::ios::showpos); // turn off the std::ios::showpos flag std::cout << 28 << '\n'; std::cout.setf(std::ios::hex); // try to turn on hex output std::cout << 27 << '\n'; std::cout.unsetf(std::ios::dec); // turn off decimal output std::cout.setf(std::ios::hex); // turn on hexadecimal output std::cout << 27 << '\n'; // Turn on std::ios::hex as the only std::ios::basefield flag std::cout.setf(std::ios::hex, std::ios::basefield); std::cout << 27 << '\n';/*output:+27+1.E+006+B1B cout.setf()使用的标志,其是一个enum类型: boolalpha enum值 remark skipws 0x0001 当从一个流进行读取时,跳过空白字符(spaces, tabs, newlines) left 0x0002 输出调整为左对齐. right 0x0004 输出调整为右对齐. internal 0x0008 将填充字符回到符号和数值之间. dec 0x0010 用十进制格式显示数值. oct 0x0020 用八进制格式显示数值. hex 0x0040 用十六进制格式显示数值. showbase 0x0080 输出时显示所有数值的基数. showpoint 0x0100 显示小数点和额外的零,即使不需要. uppercase 0x0200 以大写的形式显示科学记数法中的”e”和十六进制格式的”x”. showpos 0x0400 在非负数值前面显示”+(正号)”. scientific 0x0800 用科学记数法显示浮点数. fixed 0x1000 用正常的记数方法显示浮点数(与科学计数法相对应). unitbuf 0x2000 在每次插入以后,清空缓冲区. 1.2 控制域宽、填充字符和输出精度的成员函数 cout.precision(5); // 设置除小数点外有五位有效数字 cout<<123.< 使用ios 类的成员函数控制输入输出格式时,每个函数的调用都要写一条语句, 它们还不能直接嵌入到输入/输出语句中, 使用很不方便。为此, C++提供了另外一种输入/输出格式的控制方法, 即使用一种称为格式控制符的特殊函数。 预定义格式控制符分为带参数和不带参数的两种, 带参数的在头文件iomanip.h中定义,不带参数的在头文件iostream.h中定义。在使用它们时, 程序中应包含相应的头文件。格式控制符被嵌入到输入/输出语句中控制输入/输出的格式, 而不是执行输入/输出操作。 #include 其中 cout.setf 跟 setiosflags 一样,cout.precision 跟 setprecision 一样,cout.unsetf 跟 resetiosflags 一样。 setiosflags(ios::fixed) 固定的浮点显示 setiosflags(ios::scientific) 指数表示 setiosflags(ios::left) 左对齐 setiosflags(ios::right) 右对齐 setiosflags(ios::skipws 忽略前导空白 setiosflags(ios::uppercase) 16进制数大写输出 setiosflags(ios::lowercase) 16进制小写输出 setiosflags(ios::showpoint) 强制显示小数点 setiosflags(ios::showpos) 强制显示符号 2.1 iostream 中定义的不带参数的操作符: 操作符 描述 输入 输出 boolalpha 启用boolalpha标志 √ √ dec 启用dec标志 √ √ endl 输出换行标示,并清空缓冲区 √ ends 输出空字符 √ fixed 启用fixed标志 √ flush 清空流 √ hex 启用 hex 标志 √ √ internal 启用 internal 标志 √ left 启用 left 标志 √ noboolalpha 关闭boolalpha 标志 √ √ noshowbase 关闭showbase 标志 √ noshowpoint 关闭showpoint 标志 √ noshowpos 关闭showpos 标志 √ noskipws 关闭skipws 标志 √ nounitbuf 关闭unitbuf 标志 √ nouppercase 关闭uppercase 标志 √ oct 启用 oct 标志 √ √ right 启用 right 标志 √ scientific 启用 scientific 标志 √ showbase 启用 showbase 标志 √ showpoint 启用 showpoint 标志 √ showpos 启用 showpos 标志 √ skipws 启用 skipws 标志 √ unitbuf 启用 unitbuf 标志 √ uppercase 启用 uppercase 标志 √ ws 跳过所有前导空白字符 √ 2.2 iomanip 中定义的带参数的操作符: 操作符 描述 输入 输出 resetiosflags(long f) 关闭被指定为f的标志 √ √ setbase(int base) 设置数值的基本数为base √ setfill(int ch) 设置填充字符为ch √ setiosflags(long f) 启用指定为f的标志 √ √ setprecision(int p) 设置数值的精度(四舍五入) √ setw(int w) 设置域宽度为w √ 3 自定义控制格式符 3.1 自定义不带参控制格式符 #include 关于setw()与width成员: struct _Setw { int _M_n; };inline _Setw setw(int __n){ _Setw __x; __x._M_n = __n; return __x;}template 3.2 自定义带参控制格式符 #include 我们可以重载操作符<<,因为该操作符的第一个参数是ostream对象,所以一般重载为友元,且返回一个引用: #include #include ref -End-
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。