c++primer学习笔记 ( 第八章 标准IO库)
2012-04-04 21:10
543 查看
第八章 标准IO库
istream,ostream,cin,cout,cerr,>>,<<,
getline函数,分别取istream和string类型的两个引用形参。
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类型的值,用于指出流已经到达文件的结束符
2、IO标准库条件状态获取、修改函数
s.eof() 如果设置了流s的eofbit值,该函数返回true
s.bad() 如果设置了流s的badbit值,该函数返回true
s.fail() 如果设置了流s的failbit值,该函数返回true
s.good() 如果流s处于有效状态,该函数返回true
s.clear() 清空流s的所有状态,并设为true
s.clear(flag) 给流s的某个条件状态位设置为true。flag,类型是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,并读到屏幕上。
文件复制,把d.txt复制到a.txt
istream,ostream,cin,cout,cerr,>>,<<,
getline函数,分别取istream和string类型的两个引用形参。
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类型的值,用于指出流已经到达文件的结束符
2、IO标准库条件状态获取、修改函数
s.eof() 如果设置了流s的eofbit值,该函数返回true
s.bad() 如果设置了流s的badbit值,该函数返回true
s.fail() 如果设置了流s的failbit值,该函数返回true
s.good() 如果流s处于有效状态,该函数返回true
s.clear() 清空流s的所有状态,并设为true
s.clear(flag) 给流s的某个条件状态位设置为true。flag,类型是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; }
相关文章推荐
- C++Primer学习笔记第八章(8/18)标准IO库
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:字符串流
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:面向对象的标准库
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:文件的输入和输出
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:条件状态
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:输出缓冲区的管理
- C++ 学习笔记 1.0 : 基本语言(变量和基本类型,标准库类型,表达式,语句,函数,标准IO库)
- 【C++Primer学习笔记】第3章 标准库类型
- C++primer第五版第八章学习笔记
- c++primer学习笔记2 - 标准库类型
- (笔记)C++ Primer/第八章 标准IO库
- 【c++primer】第八章01——标准IO库
- 《C++primer(第五版)》学习之路-第八章:IO库
- c++ primer(第五版)学习笔记及习题答案代码版(第八章)IO库
- C++primer_第八章_IO库_学习跟踪
- C++Primer 学习笔记 第三章(标准库类型)
- C++primer第4版第八章标准IO库
- 【C++ Primer 学习笔记】chapter8 标准IO库
- C++Primer第五版【笔记】——第八章 IO库
- 第八章(4)-掌握回调的编程技巧-学习笔记