Chapter 8 标准IO库

输出缓冲区的处理

导致缓冲区刷新的操作(即将缓冲区的内容写到真实的输出设备或者文件)

1程序正常结束,return语句将清空所有缓冲区

2缓冲区已满,将在写下一个值之前刷新

3使用操纵符刷新,如endlflushends

4每次输出完成后,用unitbuf的何止设置流的内部状态,清空缓冲区

5将输入输出流关联(tie)起来,在读输入流时将刷新与其关联的输出缓冲区

说明:

cout<<”hi”<<flush;  //刷新缓冲区不添加任何字符

cout<<”hi”<<ends;  //刷新缓冲区并插入空字符null

cout<<”hi”<<endl;  //刷新缓冲区并添加换行符

cout<<unitbuf<<”hi”<<”hello”<<nounitbuf;等价于

cout<<”hi”<<flush<<”hello”<<flush;  //nounitbuf将流恢复成使用正常的、由系统管理的缓冲区刷新方式

绑定输入输出:

c.tie(&cout);

ostream *old_tie=cin.tie();

cin.tie(0); //破坏cincout之间的绑定

cin.tie(&cerr); //重新绑定cincerr

流状态的查询和控制

int val;

while(cin>>val,!cin.eof())

{

if(cin.bad())

{throw runtime_error("IO stream corrupted");}

if(cin.fail()); 

{

 cerr<<"bad data,try again";

 cin.clear(istream::failbit);  //有时编译器不编译这个命令,可改成cin.clear();

 cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  //忽略错误输入,等价于cin.ignore(200,'\n');

 continue;

}

}

文件流对象的使用

ifstream infile(ifile.c_str()); //读文件

ofstream outfile(ofile.c_str());//写文件

创建了两个读写文件流对象infileoutfile,并分别与存储读写的文件名的string对象ifileofile绑定在一起,函数c_str返回string对象的C风格字符串表示,即指向字符数组首地址的指针(因为IO标准库使用C风格字符串而非string类型作为文件名)。上述代码也可以写成:

Ifstream infile;

Infile.open(“in”); //”in”是需要读的文件名,为C风格字符串

Ofstream outfile;

Outfile.open(“out”);//”out”是需要写的文件名,为C风格字符串

文件模式(是文件的属性而不是流的属性)

文件模式有:in,out,app,ate,trunk,binary等,其中inifstream对象关联的文件模式,out,app,truncofstream对象关联的文件模式,而ate,binary和所有文件都关联。

默认情况下,ifstreamofstream对象以inout模式打开文件,注意:out模式会清空文件(等效于outtrunc模式同时有效),为防止清空,唯一方法是指定以app模式打开文件:

Ofstream outfile(“filename”,ofstream::app);

注意:fstream对象同时指定outin模式,则不清空文件;若只有out模式,则清空文件;而若指定trunc模式,则无论是否指定in模式,文件都会被清空。

fstream inout(“filename”,fstream::in|fstream::out);//同时指定两种模式采用位操作

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值