控制cout格式化输出有三种方法,
1.使用ios类中的枚举变量
2.使用I/O控制符
3.使用ios类成员函数
此处先介绍第二种,其他两种以后更新。
在介绍I/O控制符之前,我先简单说一下endl的原理,
endl的功能是换行+刷新缓冲区,
由于cout会对输出的内容进行缓冲,所以输出的内容并不会立即输出到目标设备(显示器)而是被存储在缓冲区中,直到缓冲区填满才输出。
一般输出的话,有三种情况会进行输出:1.刷新缓存区 2.缓存区满的时候 3.关闭文件
但是一般情况下,不加endl大多数情况下,也能正常输出,是因为在系统较为空闲时候,会查看缓存区的内容,如果发现新的内容,便进行输出。但是 你并不清楚,系统什么时候输出,什么时候不输出,与系统自身的运行状况有关。
而刷新缓存区,是强制性的,绝对性的输出。不取决于系统运行状况。
这篇文章中,介绍常用的I/O控制符。
以下代码是在vs2015下编写,首先要包含头文件
#include <iomanip> //控制符头文件
- 1
1>十进制、八进制、十六进制输出
int v1 = 30;
int v2 = 300;
int v3 = 1024;
cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout <<dec<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 十进制是默认输出
cout <<oct<<v1<<" "<<v2<<" "<<v3<<" "<<endl; //八进制输出
cout <<hex<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 十六进制输出的时候数值默认是小字母
// 要恢复默认输出,如果不恢复默认的话,之后的输出会一直保持十六进制输出。
cout <<dec<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 将控制符恢复默认
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2>设置数值中字母大写输出setiosflags(ios::uppercase),设置数值中字母小写输出resetiosflags(ios::uppercase)
int v1 = 30;
int v2 = 300;
int v3 = 1024;
cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout <<hex<<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout <<setiosflags(ios::uppercase)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//设置十六进制中的字母是大写输出
cout <<resetiosflags(ios::uppercase) <<v1<<" "<<v2<<" "<<v3<<" "<<endl;//恢复默认(小写字母输出)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3>设置输出宽度setw()
int v1 = 30;
int v2 = 300;
int v3 = 1024;
cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout <<setw(1)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// 输出预留空格数,空间多余则向右对齐,空间不足按数据长度输出
cout <<setw(20)<<v1<<" "<<v2<<" "<<v3<<" "<<endl; // setw 操作符只对紧接其后的待输出变量有效。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4>左对齐,右对齐输出
int v1 = 30;
int v2 = 300;
int v3 = 1024;
cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout <<setw(20)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//说明默认是right对齐
cout <<setiosflags(ios::left)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;//setiosflags(ios::left)设置输出为左对齐
cout <<setw(20)<<setiosflags(ios::right)<<v1<<" "<<v2<<" "<<v3<<" "<<endl;// right是默认
- 1
- 2
- 3
- 4
- 5
- 6
- 7
5>设置填充字符setfill()
int v1 = 30;
int v2 = 300;
int v3 = 1024;
cout <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
cout << setfill('*') << setw(20) <<v1<<" "<<v2<<" "<<v3<<" "<<endl;
//setfill()控制符填充空白的字符
cout << setfill(' '); //恢复默认,填充空格
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
6>设置小数位数setprecision()
double v1 = 22.0 / 7;
cout << v1 << endl;
//小数位数截断时,进行四舍五入处理。
cout << setprecision(0) << v1 << endl;
cout << setprecision(1) << v1 << endl;
cout << setprecision(2) << v1 << endl;
cout << setprecision(3) << v1 << endl;
cout << setprecision(4) << v1 << endl;
cout << setprecision(8) << v1 << endl;
//setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。
cout << setiosflags(ios::fixed);
cout << v1 << endl;
cout << setprecision(6) << endl;// 恢复默认值
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
7>强制显示小数点和无效0setiosflags(ios::showpoint);,强制显示正负号setiosflags(ios::showpos);
double v1 = 5;
double v2 = -5.8;
cout << v1 << " " << v2 << endl;
// 强制显示小数点和无效0
cout << setiosflags(ios::showpoint);
cout << v1 << " " << v2 << endl;
// 强制显示正负号
cout << setiosflags(ios::showpos);
cout << v1 << " " << v2 << endl;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
控制cout格式化输出有三种方法,
1.使用ios类中的枚举变量
2.使用I/O控制符
3.使用ios类成员函数