I/O(输入/输出)流类库提供对象之间的数据交互服务
流类库预定义了一批流对象,连接常用的外部设备
程序员可以定义所需的I/O流对象,使用流库提供的工作方式 实现数据传输
1.流类和流对象
(概括)
1.程序中,对数据的输入/输出是以字节流实现的
2.应用程序对字节序列作出各种数据解释
3. I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。
4.流类对象可以建立和删除,可以从流中获取数据和向流添加数据
流类库
1.流库(stream library)是用继承方法建立的输入输出类库
2.流库具有两个平行的基类:streambuf 和 ios 类,所有流类均以两者之一作为基类
streambuf 类提供对缓冲区的低级操作
设置缓冲区 对缓冲区指针操作 向缓冲区存/取字符
以下三个类窦继承了streambuf(对缓冲区的低级操作
filebuf(文件缓冲管理)
strstreambuf(字符串缓冲区管理)
stdiobuf(标准I/O缓冲区管理)
ios 类及其派生类提供用户使用流类的接口,支持对streambuf 的缓
冲区输入/输出的格式化或非格式化转换
头文件
iostream.h 包含操作所有输入/输出流所需的基本信息含有cin、cout、cerr、clog对象,提供无格式和格式化的I/O
iomanip.h 包含格式化I/O操纵算子,用于指定数据输入输出的格式
fstream.h 处理文件信息,包括建立文件,读/写文件的各种操作接口
标准流和流文件操作
标准流是C++预定义的对象,提供内存与外部设备进行数据交互功能
流的操作是流类的公有成员函数
标准流
(1) cin istream 类的对象,通常连向键盘,可以重定向
(2) cout ostream 类的对象,通常连向显示器,可以重定向
(3) cerr ostream 类的对象,连向显示器。不能重定向
(4) clog ostream 类的对象,连向打印机。不能重定向
#include<iostream>
using namespace std;
void main()
{
char str[30] = { 0 };
cin >> str;
cout << str;
system(str);
cerr << "error for you";//无法重定向
cin.get();
cin.get();
}
函数 功能
read 无格式输入指定字节数
get 从流中提取字符,包括空格
getline 从流中提取一行字符
ignore 提取并丢弃流中指定字符
peek 返回流中下一个字符,但不从流中删除
gcount 统计最后输入的字符个数
eatwhite 忽略前导空格
seekg 移动输入流指针
tellg 返回输入流中指定位置的指针值
operstor>> 提取运算符
#include<iostream.h>
void main()
{ char c;
cout << "Enter first sentence followed by Enter\n" ;
while ( (c = cin.get()) != '\n' ) cout.put(c);
cout << endl ;
cout << "Enter second sentence followed by Enter\n" ;
while ( cin.get(c) )
{ if ( c=='\n' ) break; cout.put(c); }
cout << endl ;
cout << "Enter third sentence followed by Enter\n" ;
char s[ 80 ] ;
cin.get ( s, 10 ) ;
cout << s << endl ;
}
输出流操作
函数 功能put 无格式,插入一个字节
write 从无格式,插入一字节序列
flush 刷新输出流
seekp 移动输出流指针
tellp 返回输出流中指定位置的指针值
operstor<< 插入运算符
//例10-3
#include<iostream.h>
void main()
{ cout << "Enter a sentence followed by Enter\n" ;
char s[ 26 ] ;
cin.getline ( s, 26 ) ;
cout.write(s, 26) ;
cout<<endl;
}
流错误状态
标识常量 值 意义
goodbit 0x00 状态正常
eofbit 0x01 文件结束符
failbit 0x02 I/O操作失败,数据未丢失,可以恢复
badbit 0x04 非法操作,数据丢失,不可恢复