在标准输入流与输出流中使用控制符笔记
2016-03-07 16:09
375 查看
控制符 | 作用 |
dec | 设置数值的基数为10 |
hex | 设置数值的基数为16 |
cot | 设置数值的基数为8 |
setfill(c) | 设置填充字符c,c可以是字符常量,也可以是字符变量 |
setprecision(n) | 设置浮点数的精度为n位。在以一般的十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。 |
setw(n) | 设置字段宽度为n位 |
setiosflags(ios::fixed) | 设置浮点数以固定小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法(即指数)显示 |
setiosfags(ios::left) | 数据左对齐 |
setiosflags(ios::right) | 数据右对齐 |
setiosflags(ios::skipws) | 忽略前导的空格 |
setiosflags(ios::uppercase) | 数据以十六进制输出时字母以大写表示 |
setiosflags(ios::lowercase) | 数据以十六进制输出时字母以小写表示 |
setiosflags(ios::showpos) | 输出正数时给出加号 |
#include<iostream> #include<iomanip> using namespace std; int main() { int a,f; double b,c,d,e; a=62; cout<<dec<<a<<endl; //数据a以10进制输出 cout<<hex<<a<<endl; //数据a以16进制输出 cout<<oct<<a<<endl; //数据a以8进制输出 cout<<dec<<setw(10)<<a<<endl; cout<<dec<<setfill('*')<<setw(10)<<a<<endl<<endl; //以10进制并按照10位字段宽度输出数据a,填充字符为* //setfill(c)与setw(n)必须与一同出现,而sew(n)可以独自出现,默认的填充字符为空 //用setfill(c)设置填充字符时应该用 ''符号括起字符变量 b=12345.678; setprecision(6); //设置浮点数精度为6 cout<<dec; //设置以十进制数输出 cout<<b<<endl; //在以一般的十进制小数输出时,n代表有效数字,并且遵循四舍五入 cout<<setiosflags(ios::fixed)<<b<<endl; //在以fixed(固定小数位)形式时,n为小数位 cout<<setiosflags(ios::scientific)<<b<<endl<<endl; //在以scientific(指数)形式输出时,n为小数位 c=620.620; d=987.6; e=789.9666; cout<<setiosflags(ios::left); //输出数据的左对齐 cout<<c<<endl; cout<<d<<endl; cout<<e<<endl<<endl; cout<<setiosflags(ios::right)<<setfill(' '); //输出数据的右对齐,要达到输出数据的右对齐必须用到setw(n)控制符来设置字段宽度 cout<<setw(10)<<c<<endl; //由于前面有涉及到用控制符setfill(n)将填充字符设置成了*,这里讲设置符重新设置成了空格 cout<<setw(10)<<d<<endl; //设置具有延续性,一旦前面设置了输出的格式,在没有语句改变的情况下,系统会自动按照前面的输出格式输出数据 cout<<setw(10)<<e<<endl<<endl; f=6206; cout<<hex<<setiosflags(ios::uppercase)<<f<<endl; //数据以16进制输出时字母以大写表示 cout<<hex<<resetiosflags(ios::uppercase)<<f<<endl; //关闭了以上的格式,恢复成默认的格式 cout<<dec<<setiosflags(ios::showpos)<<f<<endl<<endl; //输出正数时给出'+'号 return 0; }运行结果:0
注意:①.上面的源代码中并没有setiosflags(ios::skipws)的举例。 ②.在上面程序运行时出现了误差,控制符setiosflags(ios::scientific)控制b输出的理论值应该是1.234568e+004,但是输出的值是12345.7,后面有用另外一个编译器编译(编译此代码的编译器分别是dev c++,visual c++6.0),得到的结果仍然与此图相同,然后另外单独写了源代码尝试这组数据,而得到的结果与理论符合,不理解存在这种误差的原因。注意点: 1.关闭格式控制符的方法是在在格式控制符前面加re即可。例如:cout<<setiosflags(ios::fixed)<<a<<endl;关闭的语句为:cout<<resetiosflags(ios::fixed)<<a<<endl; 2.假如要使用控制符,要在程序单位的开头额外加上iomanip头文件;
关于setiosflags(ios::skipws)控制符: 这里需要说明的是setiosflags(ios::skipws)是一个输入控制符,而不是一个输出控制符,cin是默认把skipws开启的。代码:(开启情况,也是默认情况)
#include <iostream> #include <iomanip> using namespace std; int main() { char s1,s2,s3; cin>>setiosflags(ios::skipws); cin>>s1>>s2>>s3; cout<<s1<<s2<<s3<<endl; return 0; }运行结果:
关闭情况:
#include <iostream> #include <iomanip> using namespace std; int main() { char s1,s2,s3; cin>>resetiosflags(ios::skipws); cin>>s1>>s2>>s3; cout<<s1<<s2<<s3<<endl; return 0; }运行结果:
分析:skipws的意思是吃掉空格,在第一种情况也就是默认情况,当你连续地输入多个数据时,由于有skipws的存在,你所按下的空格会被系统自动地过滤,此时的情况就是a='1',b='2',c='3';在第二种情况,由于没有了skipws吃掉空格,所以你所输入的空格也会被赋给变量,所以第二种情况是a='1',b=' ',c='2'(b等于空格),所以才出现图中所存在的情况。
使各行小数点对其的方法:原理:利用setw(n)、setiosflags(ios::fixed)与setiosflags(ios::ringht)实现输出数据的右对齐和输出数据小数点位数一致,从而达到目的。源代码:
#include<iostream> #include<iomanip> using namespace std; int main() { double a,b,c; a=1234.567; b=620.62062; c=987.96; cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2); cout<<setw(10)<<a<<endl; cout<<setw(10)<<b<<endl; cout<<setw(10)<<c<<endl; return 0; }运行结果:
相关文章推荐
- 字符数组笔记
- 数组的总结笔记
- 自行车笔记
- [Java] web输入框默认值处理
- arcgis andriod 长按获得当前信息
- 运算放大器的输入和输出限制
- Java实现的死锁示例
- VMWare Workstation虚拟机网卡工作模式及配置方法
- ECMAScript 6 类 应用
- hrbust 哈理工oj 2113 Count【STL水题】
- 排序算法:希尔排序
- Gallery与ImageSwitch实现照片的预览功能
- 从这里开始,零度的追逐
- 第二章笔记
- C语言中改变字体颜色和背景的方法
- QT学习第一节
- 排序算法:希尔排序
- 简析类与对象,组合类,派生类的初始化过程
- NestedScrollView嵌套ViewPager
- Win8.1系统安装软件时报错called runscript when...解决方法