流类体系及各类控制

流是一种抽象概念,负责在数据的产生者和数据的使用者之间建立联系,并管理数据的流动。

流类库中两个重要功能为标准输入/输出和文件处理

C++的流类库中定义了四个全局流对象:cin,cout,cerr,和clog

cin标准输入流对象,键盘为其对应的标准设备

cout标准输出流对象,显示器为标准设备。

cerr和clog标准错误输出流,输出设备是显示器。

其中,cin,cout和clog是带缓冲区的,缓冲区由streambuf类对象来管理。而cerr为非缓冲区流,一旦错误发生立即显示。

这四个功能均在<iostream.h>头文件内(VC6.0需要.h,VS2010不需要.h)

C++在类ios中提供格式化输入输出。这些格式是对所有文本方式的输入输出流均适用。格式控制符定义为公有的无名的枚举类型。

enum
{
   skipws=0x0001,        //跳过输入中的空白字符
    left=0x0002,        //输出向左对齐
    right=0x0004,        //~向右对齐
    internal=0x0008,    //在输出符号或数制字符后填充
    dec=0x0010,            //在输入输出时将数据按十进制处理
    oct=0x0020,            //在输入输出时将数据按八进制处理
    hex=0x0040,            //在输入输出时将数据按十六进制处理
    showbase=0x0080,    //在输出时带有表示数制基的字符
    showpoint=0x0100,    //输出浮点数时,必定带小数点
    uppercase=0x0200,    //输入十六进制,用大写
    showpos=0x0400,        //输出正数是,加“+”号
    scientific=0x0800,    //科学方式输出浮点数
    fixed=0x1000,        //科学方式输出实数
    unitbuf=0x2000,        //插入后,立即刷新流
    stdio=0x4000        //插入后,立即刷新stdout和stderr
}

 

该枚举说明中每一个枚举实际对应两字节数据(16位)中的一个位,所以可以同时采用多个格式控制,只要把对应位置1即可,这样既方便又节约内存。取多种控制时,用或“|”运算符来合成。

流操作子:可代替流格式控制成员函数。(绝大多数流操作子VC++不支持)

下面是一些流操作子的功能

下面示范部分用法

#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
    int a = 1;
    char b,c,d;
    cout<<"input char:";
    cin>>noskipws>>b>>c>>d;
    cout<<"output char: b = "<<b<<", c = "<<c<<", d = "<<d<<endl;
    cout<<"input char:";
    cin>>skipws>>b>>c>>d;
    cout<<"output char: b = "<<b<<", c =  "<<c<<", d = "<<d<<endl;

    cout.flags(ios::right | ios::showbase | ios::scientific);
    for(int i=1; i<8; ++i)
    {
        cout<<a*8E5<<"    ";
    }
    cout<<endl;

    for(int i=90; i<100; ++i)
        cout<<setbase(8)<<i<<" "<<setbase(16)<<i<<"    "<<setbase(10)<<i<<endl;
    for(int i=1; i<10; ++i)
        cout<<left<<setfill('#')<<setw(5)<<i;
}

运行结果为

猜你喜欢

转载自www.cnblogs.com/area-h-p/p/10385095.html