🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🐰C++格式输入输出
🏡用流对象的成员函数控制输入输出格式
🌸1.控制格式的标志位
在ios类中声明了数据成员x_flags(声明语句:long x_flags;),它存储控制输入输出格式的状态标志,每个状态标志占一位。状态标志的值只能是ios类中定义的枚举量.
例如:
如果设置了某个状态标志,则x_flags中对应位为1,否则为0.这些状态标志之间是或的关系,可以标志并存
🌸2.使用成员函数设置标志字
ios类中定义了数据成员x_flags来记录当前格式化的状态,即各标志位的设置值,这个数据成员被称为标志字。格式标志在类ios中被定义为枚举值,因此在引用这些格式标志时要在前面加上类名ios和域运算符"::"。设置这个标志字的成员函数为setf,其调用格式如下:
stream_obj.setf(ios::标志位名);
这里,stream_obj是要设置格式标志的流对象,常用的是cin和cout。要设置多个标志时,使用位运算符'|'
cout.setf(ios::dec|ios::scientific);
(1)清除状态标志。
unsetf函数用来清除一个状态标志,即指定的状态标志位为0,
stream_obj.unsetf(ios::标志位名);
(2)取消标志状态值。flags函数用来取当前状态标志。
有两种方法:
1. stream_obj.flags(); 2. stream_obj.flags(ios::标志位名);
不带参数的函数是返回与流相关的当前状态标志值。带参数的函数是把状态标志值设置为标志位名指定的值,并返回设置前的状态标志值。
注意:函数setf是在原有的基础上追加设定,而flags函数是用新值覆盖以前的值。
1. #include<iostream> 2. using namespace std; 3. int main() 4. { 5. cout.flags(ios::oct); 6. cout<<"OCT:1010="<<1010<<endl;//1010的8进制形式 7. cout.flags(ios::dec); 8. cout<<"DEC:1010="<<1010<<endl;//1010的10进制形式 9. cout.flags(ios::hex); 10. cout<<"HEX:1010="<<1010<<endl;//1010的16进制形式 11. cout.flags(ios::uppercase|ios::hex); 12. cout<<"UPPERCASE:1010="<<1010<<endl;//1010的16进制且大写的形式 13. cout.unsetf(ios::hex);//清除标志字 14. cout<<1010<<endl; 15. return 0; 16. } 17. 结果: 18. OCT:1010=1762 19. DEC:1010=1010 20. HEX:1010=3f2 21. UPPERCASE:1010=3F2 22. 1010
🌸3.使用成员函数设置域宽、填充字节、精度
在ios类中,除了提供了操作状态标志的成员函数外,还提供了设置域宽、填充字节、精度的成员函数来对输出进行格式化
(1)设置域宽的成员函数width
有两种形式:
【1】int width()//该函数用来返回当前输出数据时的宽度
【2】in width(int wid)//该函数用来设置当前输出数据的宽度为wid,并返回更新前的宽度值
注意:如果输出宽度没有设置,那么默认情况下为数据所占最少字符数。所设置的域宽仅对下一个输出流有效,当一次输出完成后,域宽恢复为0
(2)设置填充字符的成员函数fill
有两种形式:
【1】char fill()//该函数用来返回当前所使用的填充字符
【2】char fill(char c)//带参数的fill函数用来设置填充字符为参数c字符,并返回更新之前的填充字符
注意:如果填充字符省略,那么默认填充字符为空格符。如果设置的数据宽度小于数据所需要的最少字符,则数据宽度默认宽度处理。
(3)设置浮点数输出精度的成员函数precision
有两种形式:
【1】int precision()//该函数返回当前浮点数的有效数字的个数
【2】int precision(int n)//该函数设置浮点数输出时的有效数字个数,并返回更新前的值
注意:float实数最多提供7有效数字,double型实数最多提供15位有效数字,long double型实数最多提供19位有效数字
1. #include<iostream> 2. using namespace std; 3. int main() 4. { 5. cout<<"5201314"<<endl; 6. cout<<"Default width:"<<cout.width()<<endl; 7. cout.width(12); 8. cout<<520<<endl; 9. cout<<"Default fill:"<<cout.fill()<<endl; 10. cout.width(12); 11. cout.fill('#'); 12. cout<<"Default precision:"<<cout.precision()<<endl; 13. cout.precision(5); 14. cout<<3.1415926<<endl; 15. return 0; 16. } 17. 结果: 18. 5201314 19. Default width:0 20. 520 21. Default fill: 22. Default precision:6 23. 3.1416(如果域宽不够,就会四舍五入)
🏡用控制符控制输入输出格式
使用ios类的成员函数来控制输入或输出格式时,必须有流对象来进行调试,使用不方便。我们可以使用特殊的、类似于函数的控制符来进行控制。控制符可以直接嵌入到输入或输出操作的语句中。控制符如下
这些控制符是在iomanip中定义的,因此如果在程序中使用这些控制符必须把头文件iomanip包含进来。
1. #include<iostream> 2. #include<iomanip> 3. using namespace std; 4. int main() 5. { 6. cout<<"DEC:"<<dec<<1010<<endl; 7. cout<<"HEX:"<<hex<<1010<<endl; 8. cout<<"OCT:"<<oct<<1010<<endl; 9. cout<<"OCT:"<<setbase(8)<<1010<<endl;//setbase(n)设置的格式(0,8,10,16)默认值为0 10. cout<<setw(15)<<"hello world!"<<endl; 11. return 0; 12. } 13. 结果: 14. DEC:1010 15. HEX:3f2 16. OCT:1762 17. OCT:1762 18. hello world!
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸