做网站公司名字,模仿别人网站,网站开发的难点,成都公司展厅希望按照一定的格式进行输出#xff0c;如按十六进制输出整数#xff0c;输出浮点数时保留小数点后面两位#xff0c;输出整数时按 6 个数字的宽度输出#xff0c;宽度不足时左边补 0#xff0c;等等。C 中的 cout 对象则使用流操作算子#xff08;你也可以叫做格式控制符…希望按照一定的格式进行输出如按十六进制输出整数输出浮点数时保留小数点后面两位输出整数时按 6 个数字的宽度输出宽度不足时左边补 0等等。C 中的 cout 对象则使用流操作算子你也可以叫做格式控制符或者成员函数进行控制。
使用流操作算子
C 中常用的输出流操纵算子如下表所示它们都是在头文件 iomanip 中定义的要使用这些流操纵算子必须包含该头文件。
注意“流操纵算子”一栏中的星号*不是算子的一部分星号表示在没有使用任何算子的情况下就等效于使用了该算子。例如在默认情况下整数是用十进制形式输出的等效于使用了 dec 算子。
C 流操纵算子
流操作算子的使用方法 使用这些算子的方法是将算子用 和 cout 连用。例如
cout hex 12 , 24;这条语句的作用是指定以十六进制形式输出后面两个数因此输出结果是
c, 18setiosflags() 算子 setiosflags() 算子实际上是一个库函数它以一些标志作为参数这些标志可以是在 iostream 头文件中定义的以下几种取值它们的含义和同名算子一样。
setiosflags() 可以使用的标志及其说明
标 志作 用ios::left输出数据在本域宽范围内向左对齐ios::right输出数据在本域宽范围内向右对齐ios::internal数值的符号位在域宽内左对齐数值右对齐中间由填充字符填充ios::dec设置整数的基数为 10ios::oct设置整数的基数为 8ios::hex设置整数的基数为 16ios::showbase强制输出整数的基数八进制数以 0 开头十六进制数以 0x 打头ios::showpoint强制输出浮点数的小点和尾数 0ios::uppercase在以科学记数法格式 E 和以十六进制输出字母时以大写表示ios::showpos对正数显示“”号ios::scientific浮点数以科学记数法格式输出ios::fixed浮点数以定点格式小数形式输出ios::unitbuf每次输出之后刷新所有的流ios::stdio每次输出之后清除 stdout, stderr
这些标志实际上都是仅有某比特位为 1而其他比特位都为 0 的整数。
多个标志可以用|运算符连接表示同时设置。例如
cout setiosflags(ios::scientific|ios::showpos) 12.34;输出结果是
1.234000e001如果两个相互矛盾的标志同时被设置如先设置 setiosflags(ios::fixed)然后又设置 setiosflags(ios::scientific)那么结果可能就是两个标志都不起作用。因此在设置了某标志又要设置其他与之矛盾的标志时就应该用 resetiosflags 清除原先的标志。例如下面三条语句
cout setiosflags(ios::fixed) 12.34 endl;
cout resetiosflags(ios::fixed) setiosflags(ios::scientific | ios::showpos) 12.34 endl;
cout resetiosflags(ios::showpos) 12.34 endl; //清除要输出正号的标志输出结果是
12.340000
1.234000e001
1.234000e001 关于流操纵算子的使用来看下面的程序。
#include iostream
#include iomanip
using namespace std;
int main()
{int n 141;//1) 分别以十六进制、十进制、八进制先后输出 ncout 1) hex n dec n oct n endl;double x 1234567.89, y 12.34567;//2)保留5位有效数字cout 2) setprecision(5) x y endl;//3)保留小数点后面5位cout 3) fixed setprecision(5) x y endl;//4)科学计数法输出且保留小数点后面5位cout 4) scientific setprecision(5) x y endl;//5)非负数显示正号输出宽度为12字符宽度不足则用 * 填补cout 5) showpos fixed setw(12) setfill(*) 12.1 endl;//6)非负数不显示正号输出宽度为12字符宽度不足则右边用填充字符填充cout 6) noshowpos setw(12) left 12.1 endl;//7)输出宽度为 12 字符宽度不足则左边用填充字符填充cout 7) setw(12) right 12.1 endl;//8)宽度不足时负号和数值分列左右中间用填充字符填充cout 8) setw(12) internal -12.1 endl;cout 9) 12.1 endl;return 0;
}程序的输出结果是
1)8d 141 215
2)1.2346e06 12.346
3)1234567.89000 12.34567
4)1.23457e06 1.23457e01
5)***12.10000
6)12.10000****
7)****12.10000
8)-***12.10000
9)12.10000需要注意的是setw() 算子所起的作用是一次性的即只影响下一次输出。每次需要指定输出宽度时都要使用 setw()。因此可以看到第 9) 行的输出因为没有使用 setw()输出的宽度就不再是前面指定的 12 个字符。
在读入字符串时setw() 还能影响 cin 的行为。例如下面的程序
#include iostream
#include iomanip
using namespace std;
int main()
{string s1, s2;cin setw(4) s1 setw(3) s2;cout s1 , s2 endl;return 0;
}输入
1234567890程序的输出结果是
1234,567说明setw(4)使得读入 s1 时只读入 4 个字符其后的setw(3)使得读入 s2 时只读入 3 个字符。
setw() 用于 cin 时同样只影响下一次的输入。
setw() 究竟是如何实现的以至于能和 cout 连用来指定输出宽度自行查看编译器所带的 iomanip 头文件然后写一个功能和 setw() 完全相同的 mysetw()。
调用cout的成员函数
ostream 类有一些成员函数通过 cout 调用它们也能用于控制输出的格式其作用和流操纵算子相同如下表所示。
ostream 类的成员函数
setf 和 unsetf 函数用到的flag与 setiosflags 和 resetiosflags 用到的完全相同。
这些成员函数的用法十分简单。例如下面的三行程序
cout.setf(ios::scientific);
cout.precision(8);
cout 12.23 endl;输出结果是
1.22300000e001