c++primer学习笔记 ( 第八章 标准IO库)

第八章 标准IO

istreamostreamcincoutcerr>><<

getline函数,分别取istreamstring类型的两个引用形参。

8.1面向对象的标准库

io标准库类型和头文件

iostream 

fstream

sstream

io对象不可复制或赋值

8.2 条件状态

1、IO标准库内部的条件状态:

2、 strm::iostate  由各个iostream 类定义,用于定义条件状态

strm::badbit  strm::iostate类型的值,用于指出被破坏的流

strm::failbit  strm::iostate类型的值,用于指出失败的流

strm::eofbit  strm::iostate类型的值,用于指出流已经到达文件的结束符

2IO标准库条件状态获取、修改函数

s.eof()         如果设置了流seofbit值,该函数返回true

s.bad()         如果设置了流sbadbit值,该函数返回true

s.fail()         如果设置了流sfailbit值,该函数返回true

s.good()         如果流s处于有效状态,该函数返回true

s.clear()         清空流s的所有状态,并设为true

s.clear(flag)         给流s的某个条件状态位设置为trueflag,类型是strm::iostate

s.setstate(flag)     给流s的添加指定条件。flag,类型是strm::iostate

s.rdstate()      获取流s的当前条件,返回值类型是strm::iostateif(cin)  //直接检查流状态

if(cin)  //直接检查流状态

while(cin>>word) //检测表达式返回的流,间接检查流状态

int ival;

whle(cin>>ival,!cin.eof()){

if(cin.bad())

  throw runtime_error("IO stream corrupted");

if(cinj.fail()){

  cerr<<"bad data,try again.";

  cin.clear(istream::goodbit);

  cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

continue;

  }

}

//这个程序不断读入cin,知道到达文件结束符或者发生不可恢复的读取错误为止。

8.3输出缓冲区的管理

1.输出缓冲区的刷新  

cout<<"hi!"<<ends;    //刷新缓冲区,不增加任何数据

cout<<"hi!"<<endl;    //刷新缓冲区,增加一个换行符

cout<<"hi!"<<flush;   //刷新缓冲区,增加任何数据null

2.unitbuf操纵符

cout<<unitbuf<<"first"<<"second"<<nounitbuf;

等价于

cout<<"first"<<flush<<"second"<<flush;

nounitbuf操纵符将流恢复为使用正常的,由系统管理的缓冲区刷新方式。

worning:如果程序崩溃了,则不会刷新缓冲区。

 

8.4 文件的输入和输出

ifstream 读文件

ofstream 写文件

fstream 读写同一个文件

下面程序建立一个文件d.txt,并读到屏幕上。


#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(){
string str;
ofstream out("d.txt");
str="ABCD\nEFGH\nABCD\nDFGH\n";
out<<str<<endl;
ifstream in("d.txt");
for(string str;getline(in,str);)
cout<<str<<"\n";
return 0;
}


文件复制,把d.txt复制到a.txt


#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(){
string str;
ifstream in("d.txt");
ofstream out("a.txt");
for(string str;getline(in,str);)
out<<str<<"\n";
cout<<"文件复制成功";
return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值