关闭

第八章 标准io库

210人阅读 评论(0) 收藏 举报

 

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的功能

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17682次
    • 积分:438
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条
    文章存档
    最新评论