c++教程之格式化输出--操作符实现

  我们平时自己使用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位的数前面添加空格。

    注意事项:

      1. setw() 虽然带有括号,但是其实是一个操作符,并不是函数。
      2. setw() 主要引用头文件 iomanip 才能使用。
      3. 如果setw() 所约束的输出超过了限制,不会被截断。是多少位就输出多少位。
      4. 如果输出是浮点数,小数点也会占一个位。
      5. 如果输出是字符串,空格有段有效字符,占一个位。从上面的输出结果也可以看出来。
      6. setw() 只能约束住跟自己相邻的一个输出。也就是说 
    int val1 = 1,val2 = 23;
  1. 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()是控制浮点数的有效位数。

      注意事项

      1. setprecision() 同样是一个操作符,需要包含头文件 iomanip。
      2. 如果输出浮点数不足位,不会在其后面补0。
      3. 如果末尾有0,默认是不输出的。后面我们有其他方法可以输出末尾的0。
      4. setprecision() 不同于setw(),setprecision() 设置之后,在下次设置之前都是有效的。从程序结果中可以看出来。
      5. 如果要输出的位数过多,则用科学计数法表示,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 }

    从结果中可以看出,输出的浮点数都有四位小数。

      注意事项:

      1. 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()设置的数字,就表示小数位的个数,不足补零。 

    如有错误,请指出!!明天写成员函数实现。

猜你喜欢

转载自www.cnblogs.com/hml-xxbj/p/9658378.html