🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,数据结构
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🐰C++格式输入输出
🏡用流对象的成员函数控制输入输出格式
🌸1.控制格式的标志位
🌸2.使用成员函数设置标志字
🌸3.使用成员函数设置域宽、填充字节、精度
🏡用控制符控制输入输出格式
🐰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函数用来取当前状态标志。
有两种方法:
stream_obj.flags(); stream_obj.flags(ios::标志位名);
不带参数的函数是返回与流相关的当前状态标志值。带参数的函数是把状态标志值设置为标志位名指定的值,并返回设置前的状态标志值。
注意:函数setf是在原有的基础上追加设定,而flags函数是用新值覆盖以前的值。
#include<iostream> using namespace std; int main() { cout.flags(ios::oct); cout<<"OCT:1010="<<1010<<endl;//1010的8进制形式 cout.flags(ios::dec); cout<<"DEC:1010="<<1010<<endl;//1010的10进制形式 cout.flags(ios::hex); cout<<"HEX:1010="<<1010<<endl;//1010的16进制形式 cout.flags(ios::uppercase|ios::hex); cout<<"UPPERCASE:1010="<<1010<<endl;//1010的16进制且大写的形式 cout.unsetf(ios::hex);//清除标志字 cout<<1010<<endl; return 0; } 结果: OCT:1010=1762 DEC:1010=1010 HEX:1010=3f2 UPPERCASE:1010=3F2 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位有效数字
#include<iostream> using namespace std; int main() { cout<<"5201314"<<endl; cout<<"Default width:"<<cout.width()<<endl; cout.width(12); cout<<520<<endl; cout<<"Default fill:"<<cout.fill()<<endl; cout.width(12); cout.fill('#'); cout<<"Default precision:"<<cout.precision()<<endl; cout.precision(5); cout<<3.1415926<<endl; return 0; } 结果: 5201314 Default width:0 520 Default fill: Default precision:6 3.1416(如果域宽不够,就会四舍五入)
🏡用控制符控制输入输出格式
使用ios类的成员函数来控制输入或输出格式时,必须有流对象来进行调试,使用不方便。我们可以使用特殊的、类似于函数的控制符来进行控制。控制符可以直接嵌入到输入或输出操作的语句中。控制符如下
这些控制符是在iomanip中定义的,因此如果在程序中使用这些控制符必须把头文件iomanip包含进来。
#include<iostream> #include<iomanip> using namespace std; int main() { cout<<"DEC:"<<dec<<1010<<endl; cout<<"HEX:"<<hex<<1010<<endl; cout<<"OCT:"<<oct<<1010<<endl; cout<<"OCT:"<<setbase(8)<<1010<<endl;//setbase(n)设置的格式(0,8,10,16)默认值为0 cout<<setw(15)<<"hello world!"<<endl; return 0; } 结果: DEC:1010 HEX:3f2 OCT:1762 OCT:1762 hello world!
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸