现在的位置: 首页 > 综合 > 正文

第八章 标准io库

2013年07月01日 ⁄ 综合 ⁄ 共 1516字 ⁄ 字号 评论关闭

 

8.1 面向对象的io

1) 组成:

 

对应的宽字符的流类型就是在前面加了一个w例如:

wistream

wostream

wcout

wcin

…..

2) 继承关系

3) io对象不可以复制或复制

1. 因此不能存储在vector 等容器内

2. 当然也不可以作为形参或返回类型,如果用作参数,必须是引用类型.对流的操作总会涉及到改变,所以不要用const类型

8.2 条件状态

1)      
标准库定义的状态标记

strm::iostate

 

2)      
状态标记的取值

strm::badbit //被破坏的流,系统级错误

strm::failbit //失败的io操作

strm::eofbit //流已经达到文件的结束符

 

3)      
查询状态的函数

eof();         //如果strm::eofbit 被设置,返回true

fail();         //如果
strm::failbit
被设置,返回true

good();     //如果流处于有效状态 返回true

bad();        //如果
strm::badbit
被设置,返回 true

 

4)      
设置状态的函数

clear();     //使流中所有状态都重设为有效,说白了就是清除错误状态

clear(flag);        //清除指定错误状态

setsate(flag); //strm::iostate
添加指定的状态

 

5)      
返回现在状态

rdstate();

8.3 输出缓冲区的管理

1) 刷新缓冲区

endl;//输出一个 ‘/n’ 再刷新

ends;//输出一个 ‘/0’ 再刷新

flush;//直接刷新

 

2) 如果要刷新所有的输出可以用unitbuf操纵符

cout << unituf <<” … ”;//等价于 cout
<< unituf <<” … ”<<flush;

 

3) 绑定

任何读入输入流的尝试都将首先刷新其对应的输出缓冲

 

cin.tie(&cout);//绑定

cin.tie(0);//取消绑定

ostream *oldTie = cin.tie();//保存绑定对象

8.4 文件的输入和输出

1) 类型

ifstream 读文件

ofstream 写文件

fstream 可读可写

 

2) 打开文件

istream infile(iffile.c_str());

infile.open(“in”);

if(!infile)

         //open
error;

 

3) 关联不同文件 

infile.close();

infile.open(“out”);

 

4) 清除状态

当文件流出现了什么非正常状态(包括eofbit )的时候需要clear() 否则不能继续读取

 

4) 文件模式

ostream :  out() trunc(清空已经存在的文件流) app

istream :  
ate(
定位在文件尾) binary in()

 

例子:

Ifstream &openfile(ifstream& in
,const string &filename)

{

         in.close();

         in.clear();

         in.open(filename.c_str());

         return
in;

}

8.5  字符串流

例子:

string line,word;

while(getline(cin,line))

{

         istringstream
stream(line);

         while(stream>>word){}

}

 

1)      
特定函数

strm.str();//返回string

strm.str(s);//string  复制给s

 

2)      
使用

用来转换输入输出格式是不错的类似于c风格的 sprintf的功能

 

 

 

抱歉!评论已关闭.