I/O 格式控制器


如果学过C 语言,一定对printf的格式指定方式感到难以忘怀,之前看过的例子中,都是使用cout式来输出信息,然而没谈到格式控制,其实只要透过几种基本方式,也可以指定格式来输出信息,I/O 格式控制器是其中的一种。

I/O 格式控制器是个特殊函数,在 C++ 中常见的endl就是 I/O 格式控制器的一种,它会输出换行字符并清空串流,一个 I/O 格式控制器只影响目前处理的串流。

I/O 格式控制器也可以指定参数,如果要使用具参数的 I/O 格式控制器,必须指定iomanip标头文件;先来看个基本的例子,了解 I/O 格式控制器的作用与使用方式:

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() {
    cout << oct << 50 << endl    // 8 进制显示 
         << hex << 50 << endl;   // 16 进制显示 

    // 九九乘法表 
    for(int j = 1; j < 10; j++) { 
       for(int i = 2; i < 10; i++) { 
           cout << i << "*" << j << "=" << dec << setw(2) << (i * j); 
           cout << "  "; 
       } 
       cout << endl; 
    }

    return 0; 
}

oct控制器会将后续数字以 8 进制来显示,hex以 16进制显示,而setw可以设定字段宽度,然后使用 16 进制方式显示数字,为了要输出 10 进制的结果,在之前加入dec控制器。

在 C++ 中 1 可表示true,而 0 可表示false,输出时也是直接输出 0 与 1,下面这个程序使用boolalpha控制器,可以让输出以 true 与 false 来显示:

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    bool boolnum; 

    boolnum = true; 
    cout << boolalpha << boolnum << endl; // 显示 true

    boolnum = false; 
    cout << boolalpha << boolnum << endl; // 显示 false

    return 0; 
}

下面列出几个常用的I/O控制器与其说明:

  • boolalpha:让 bool 输出时显示 true 与 false
  • dec:10 进制显示
  • endl:输出换行字符并清空串流
  • ends:输出 Null 字符
  • fixed:以正常的数字格式显示
  • flush:清空串流
  • hex:16 进制显示
  • left:靠左对齐
  • oct:8 进制显示
  • right:靠右显示
  • scientific:科学计数表示
  • setbase(int b):指定数字基底
  • setfill(int c):指定填充字符
  • setprecision(int p):指定显示精确度
  • setw(int w):指定字段宽度,并以 16 进制显示
  • showbase:显示数字基底,例如 0x11
  • showpoint:显示小数
  • showpos:正数显示 + 号
  • skipws:忽略输入的空白字符
  • upperbase:字母大写
  • ws:忽略前导的空白字符
  • noboolalpha:关闭 boolalpha 的使用
  • noshowbase:关闭 showbase 的使用
  • noshowpoint:关闭 showpoint 的使用
  • noshowpos:关闭 showpos 的使用
  • noskipws:关闭 skipws 的使用
  • nouppercase:关闭 uppercase 的使用



展开阅读全文