在我们使用c++的输入输出流时,往往采用的是默认的输出格式,但有时候我们并不希望按这样的方式输出,需要按自己的要求控制输出格式。下面的控制符或者格式标志可以帮助我们按照相应的格式输出。
控制符和格式标志
(我从各处搜集了相应的控制符和格式标志)
表1 输入输出流的控制符(部分控制符需要iomanip头文件)
控制符 | 作 用 |
---|
dec | 设置数值的基数为10 |
hex | 设置数值的基数为16 |
oct | 设置数值的基数为8 |
setfill(ch) | 设置填充字符ch,ch可以是字符常量或字符变量 |
setprecision(n) | 设置浮点数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和 scientific(指数) |
setw(n) | 设置字段宽度为n位 |
setiosflags( ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosftags( ios::scientific) | 设置浮点数以科学记数法(即指数形式)显示 |
setiosflags( ios::left) | 输出数据左对齐 |
setiosflags( ios::right) | 输出数据右对齐 |
setiosflags( ios::skipws) | 忽略前导的空格 |
setiosflags( ios::uppercase) | 数据以十六进制形式输出时字母以大写表示 |
setiosflags( ios::lowercase) | 数据以十六进制形式输出时宇母以小写表示 |
setiosflags(ios::showpos) | 输出正数时给出“+”号 |
表2 设置格式状态的格式标志
格式标志 | 作用 |
---|
ios::left | 输出数据在本域宽范围内向左对齐 |
ios::right | 输出数据在本域宽范围内向右对齐 |
ios::internal | 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充 |
ios::dec | 设置整数的基数为10 |
ios::oct | 设置整数的基数为8 |
ios::hex | 设置整数的基数为16 |
ios::showbase | 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头) |
ios::showpoint | 强制输出浮点数的小点和尾数0 |
ios::uppercase | 在以科学记数法格式E和以十六进制输出字母时以大写表示 |
ios::showpos | 对正数显示“+”号 |
ios::scientific | 浮点数以科学记数法格式输出 |
ios::fixed | 浮点数以定点格式(小数形式)输出 |
ios::unitbuf | 每次输出之后刷新所有的流 |
ios::stdio | 每次输出之后清除stdout, stderr |
表3 设置输出格式的流操作子(需要包含iomanip头文件)
操作符 | 含义 |
---|
setfill(ch) | 用ch填充空白字符 |
setprecision(n) | 将浮点精度设置为n |
setw(n) | 按照n个字符来读或者写 |
setbase(b) | 以b为进制基数输出整数值 |
使用实例
cout<<"dec:"<<dec<<a<<endl; //以十进制形式输出整数
cout<<"hex:"<<hex<<a<<endl; //以十六进制形式输出整数a
cout<<"oct:"<<setbase(8)<<a<<endl; //以八进制形式输出整数a
cout<<setw(10)<<pt<<endl; //指定域宽为,输出字符串
cout<<setfill('\*')<<setw(10)<<pt<<endl; //指定域宽,输出字符串,空白处以'\*'填充
cout<<"pi="<<setprecision(4)<<pi<<endl; //改为4位小数
cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl; //改为小数形式输出
cout << setiosflags(ios::left); //设置左对齐
cout << setfill('_') << setw(40)<< "_" << setfill(' ') << endl//设置输出宽度和填充字符
<< "|" << setw(38) << "Store" << "|" << endl //设置输出宽度和填充字符
<< "|" << setw(38) << setfill('*') << "*" << setfill(' ') << '|' << endl//设置输出宽度和填充字符
<< "| XiaoFang Convenience Store |" << endl
<< "|" << setw(38) << setfill('*') << "*" << setfill(' ') << '|' << endl;//设置输出宽度和填充字符