流类体系及各类控制
流是一种抽象概念,负责在数据的产生者和数据的使用者之间建立联系,并管理数据的流动。
流类库中两个重要功能为标准输入/输出和文件处理
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; }
运行结果为
不积小流无以成江河