我们平时自己使用cout的时候一般是没有什么特殊的格式要求的,但是以后可能会遇到需要格式化输出的情况,所以这里讲一下cout的格式输出的方法,还在不复杂。
一、使用setw()来控制占位宽度
先写一个例子,然后再讲注意事项。
1 #include <iostream> 2 #include <iomanip> //格式化输出的头文件,注意这里不要加.h 3 4 using namespace std; //命名空间 5 6 int main() 7 { 8 int num1 = 1234,num2 = 1,num3 = 555556; 9 int num4 = 78,num5 = 4689,num6 = 9; 10 char * a = "hello"; 11 char * b = "c++ "; 12 13 cout << "第一行数字:"; 14 cout << setw(5) << num1; 15 cout << setw(5) << num2; 16 cout << setw(5) << num3; 17 cout << endl; 18 19 20 cout << "第二行数字:"; 21 cout << setw(5) << num4; 22 cout << setw(5) << num5; 23 cout << setw(5) << num6; 24 cout << endl; 25 cout << endl; 26 27 cout << "第一个字符串:" << setw(5) << a << endl; 28 cout << "第二个字符串:" << setw(5) << b << endl; 29 return 0; 30 }
首先从结果中可以看出,setw是设置输出的宽度,并且是采用右对齐的形式,也就是说在不足5位的数前面添加空格。
注意事项:
-
- setw() 虽然带有括号,但是其实是一个操作符,并不是函数。
- setw() 主要引用头文件 iomanip 才能使用。
- 如果setw() 所约束的输出超过了限制,不会被截断。是多少位就输出多少位。
- 如果输出是浮点数,小数点也会占一个位。
- 如果输出是字符串,空格有段有效字符,占一个位。从上面的输出结果也可以看出来。
- setw() 只能约束住跟自己相邻的一个输出。也就是说
- cout << setw(3) << val1 << val2 << endl;
-
这个输出结果是val1 占3位,val2 占2位。
二、使用setprecision()控制浮点数有效位
依旧先看程序,在解释。
1 #include <iostream> 2 #include <iomanip> 3 4 using namespace std; 5 6 int main() 7 { 8 float num1 = 123.456f,num2 = 563.1f,num3 = 1.30f; 9 float num4 = 123456.4444f; 10 cout << setprecision(4); 11 cout << "第一个数:" << num1 << endl; 12 cout << "第二个数:" << num2 << endl; 13 cout << "第三个数:" << num3 << endl; 14 cout << "第四个数:" << num4 << endl; 15 16 return 0; 17 }
从运行结果可以看出来,setprecision()是控制浮点数的有效位数。
注意事项
-
-
- setprecision() 同样是一个操作符,需要包含头文件 iomanip。
- 如果输出浮点数不足位,不会在其后面补0。
- 如果末尾有0,默认是不输出的。后面我们有其他方法可以输出末尾的0。
- setprecision() 不同于setw(),setprecision() 设置之后,在下次设置之前都是有效的。从程序结果中可以看出来。
- 如果要输出的位数过多,则用科学计数法表示,10为基数。从程序结果中可以看出来。
-
三、setfioflags() 控制定点输出
程序如下:
1 #include <iostream> 2 #include <iomanip> 3 4 using namespace std; 5 6 int main() 7 { 8 float num1 = 13.000f,num2 = 14.568f,num3 = 1.2f; 9 cout << setiosflags(ios::fixed|ios::showpoint); 10 cout << setprecision(4); 11 cout << "第一个数:" << num1 << endl; 12 cout << "第三个数:" << num2 << endl; 13 cout << "第二个数:" << num3 << endl; 14 15 return 0; 16 }
从结果中可以看出,输出的浮点数都有四位小数。
注意事项:
-
-
- setiosflags() 是通过状态标志来实现对输出的控制的。状态标志功能如下表:
-
状态标志 | 功能 |
ios::left | 左对齐,右边填空格 |
ios::right | 右对齐,左边填空格 |
ios::fixed | 以定点形式输出浮点数 |
ios::scientific | 以科学计数法形式输出浮点数 |
ios::dec | 所有整数以十进制输出 |
ios::hex | 所有整数以十六进制输出 |
ios::oct | 所有整数以八进制输出 |
ios::showpoint | 显示小数点和尾部的零 |
ios::showpos | 在正数前面输出+ |
i os::uppercase | 对于十六进制输出,使用大写字母表示 |
setiosflags() 需要与 setprecision() 一起使用。如果状态标志设为 ios::fixed,那么setprecision()设置的数字,就表示小数位的个数,不足补零。
如有错误,请指出!!明天写成员函数实现。