C++ Primer复习和学习笔记 第八章 标准IO库
来源:互联网 发布:淘宝开店怎么交保证金 编辑:程序博客网 时间:2024/05/29 14:18
/*编写一个函数,其唯一的形参和返回值都是 istream& 类型。该个函数应一直读取流直到到达文件结束符为止,还应将读到的内容输出到标准输出中。最后,重设流使其有效,并返回该流。通过以 cin 为实参实现调用来测试上题编写的函数。*/#include "iostream"using namespace std;std::istream & get(std::istream & in){int ival;while(in>>ival,!in.eof()){if(in.bad())//系统级的故障。如无法恢复的读写错误{throw std::runtime_error("IO stream corrupted");}if(in.fail())//出现可恢复的错误{std::cerr<<"bad data ,try again";//提示用户in.clear();//恢复流in.ignore(200,' ');//跳过类型非法的输入项/*恢复流之后需要跳过类型非法的输入项(否则会出现死循环),采用ignore函数跳过若干字符(跳过200个字符或遇到空格或文件结束为止),所以条用该函数时输入数据必须以空格作为间隔*/continue;//继续读入数据}//读入正常std::cout<<ival<<endl;}in.clear();return in;}int main(int argc, char const *argv[]){double dval;get(cin);cin>>dval;//从新使用恢复后的流cout<<dval<<endl;return 0; }
/*由于 ifstream 继承了 istream,因此可将 ifstream 对象传递给形参为 istream 引用的函数。使用第 8.2 节第一个习题编写的函数读取已命名的文件。*/#include "iostream"#include "string"#include "cstring"#include "fstream"//#include "ofstream"/*注意ofstream这个类是存在的,我们可以创建这个类型的对象,但是这个头文件是不存在的.如果要是加上这句话,那么程序就会出现错误,而且会显示出没有这个文件*/using namespace std;istream & get(istream & in){int ival;while (in>>ival,!in.eof()){if (in.bad()){throw runtime_error("runtime_error");}if (in.fail()){cerr<<"cerr in.fail()"<<endl;in.clear();in.ignore(200,' ');continue;}cout<<ival<<endl;}in.clear();return in;}int main( ) {string str;//用来保存文件名字的字符串,但是由于历史原因需要转换成为C风格的字符串cout<<"请输入文件名字字符串:"<<endl;cin>>str;//创建一个输入文件流类型ifstream的对象inFile,然后用相应的文件名初始化这个流对象。//相当于打了指定文件名字的文件,并且将它和一个ifstream的对象绑定起来。ifstream inFile(str.c_str());if (!inFile)//判断指定的文件是否被成功的打开。{cerr<<"打开文件失败!"<<endl;return -1;}//get()这个函数的形参是istream类,是ifstream的基类。所以可以传ifstream类型,给istream作为参数。get(inFile); return 0;}
/*在C盘保存一系列的文件,其中保存一些内容。然后我们使用这个程序可以存储一系列的文件名字在vector容器中,然后从这些文件中挨个读出文件的内容*/#include "iostream"#include "fstream"#include "string"#include "vector"using namespace std;void process(string s);int main(){vector<string> files;string fileNames,s;//读入vector对象的元素(也就是要处理的文件的名字)cout<<"Enter fileNames :(Ctrl + Z to end)"<<endl;while (cin>>fileNames){files.push_back(fileNames);}ifstream input;vector<string>::const_iterator it = files.begin();//处理各个文件while (it!=files.end()){cout<<*it<<endl;input.open(it->c_str());//打开文件if (!input){cerr<<"error :can not open file:"<<*it<<endl;input.clear();++it;} else {while (input>>s)process(s);input.close();input.clear();++it; } }return 0;}void process(string s){cout<<s<<endl;}
/* 将文件内容读入string类型的vector容器中,每一行存储为该容器对象的一个元素。 */#include "iostream"#include "string"#include "vector"#include "fstream"using namespace std;int fileToVector(const string & fileName,vector<string> & svec);int main(){vector<string> svec;string fileName,s;//读入文件名cout<<"请输入文件名字"<<endl; cin>>fileName;//处理文件switch(fileToVector(fileName,svec)){case 1:cout<<"错误,不能打开文件"<<fileName<<endl;return -1;case 2:cout<<"错误,系统级别的错误"<<endl;return -1;case 3:cout<<"错误:读失败"<<endl;return -1;}cout<<"vector"<<endl;for(vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter)cout<<*iter<<endl;return 0;};int fileToVector(const string & fileName,vector<string> & svec){//创建ifstream对象inFile并绑定到由形参fileName指定的文件ifstream inFile(fileName.c_str());if (!inFile)//打开文件失败{return 1;}//将文件内容读入到string类型的vector容器//将每一行存储为该容器对象的一个元素string s;while(getline(inFile,s))/*如果不是想每个容器元素中只是存放一行,而是存放一个单词。那么就使用 inFile>>s这样容器中的每个元素存储的就不是文件中的一行,而是一个一个的单独的单词。*/{svec.push_back(s);}inFile.close();//关闭文件if (inFile.eof())//遇到文件尾部{return 4;}if (inFile.bad())//发生系统级别的故障{return 2;}if (inFile.fail())//读入数据失败{return 3;}}
/*使用open_file()函数和get()函数,两个函数来读取一个文件中的内容*/#include "iostream"#include "string"#include "cstring"#include "fstream"using namespace std;istream & get(istream & in){int ival;while (in>>ival,!in.eof()){if (in.bad()){throw runtime_error("runtime_error");}if (in.fail()){cerr<<"cerr in.fail()"<<endl;in.clear();in.ignore(200,' ');continue;}cout<<ival<<endl;}in.clear();return in;}ifstream & open_file(ifstream & in,const string & fileName){in.close();//首先关闭输入流in,因为in流可能已经打开一个文件了。所以必须先关闭。in.clear();//首先清除in流中原来的状态标志,免得现在留状态的标识对下面的流的操作产生影响。in.open(fileName.c_str());//打开文件return in;}int main( ) {string fileName,s;cout<<"请输入文件的名字"<<endl;cin>>fileName;//调用open_file()函数打开文件ifstream inFile;if (!open_file(inFile,fileName.c_str()))//打开文件失败{cerr<<"打开文件失败"<<endl;return -1;}get(inFile);inFile.close();return 0;}
/*编写程序将文件中的每一行存储在 vector<string> 容器对象中,然后使用 istringstream 从 vector 里以每次读一个单词的形式读取存储的行。 */#include "iostream"#include "vector"#include "string"#include "sstream"#include "fstream"using namespace std;int fileToVector(const string & fileName,vector<string> & svec);int main(){vector<string> svec;string fileName;cout<<"请输入文件名字"<<endl;cin>>fileName;switch(fileToVector(fileName,svec)){case 1:cout<<"打开文件失败!"<<endl;break;case 3:cout<<"系统故障"<<endl;break;case 4:cout<<"读写失败"<<endl;break;}//因为是读字符串所以我们使用的是istringstream类型的对象。如果是写字符串那么我们使用的就是ostringstreamistringstream strm;string str;for (vector<string>::const_iterator iter = svec.begin();iter!=svec.end();++iter){strm.str(*iter);while(strm>>str){cout<<str<<endl;}strm.clear();//如果没有这个标志,那么读取vector的第一个元素中的所有的字符串之后,将不会再读取下面的内容。//所以如果++iter之后,进入了vector中的第二个容器之后,那么因为strm的上一次的标识没有被清除掉。所以将不会进行这次的读取。}return 0;}int fileToVector(const string & fileName,vector<string> & svec){ifstream inFile;inFile.open(fileName.c_str());if (!inFile){return 1;}string str;while (getline(inFile,str)){svec.push_back(str);}inFile.close();if (inFile.eof()){return 2;}if (inFile.bad()){return 3;}if (inFile.fail()){return 4;}}
0 0
- C++ Primer复习和学习笔记 第八章 标准IO库
- c++primer学习笔记 ( 第八章 标准IO库)
- C++Primer笔记 第八章 标准IO库
- C++Primer学习笔记第八章(8/18)标准IO库
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:文件的输入和输出
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:面向对象的标准库
- C++PRIMER第一轮复习第八章 IO库
- 【c++primer】第八章01——标准IO库
- C++primer第4版第八章标准IO库
- (笔记)C++ Primer/第八章 标准IO库
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:条件状态
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:输出缓冲区的管理
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:字符串流
- C++ Primer 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++Primer学习笔记(8)标准IO库
- C++primer第五版笔记-第八章IO库
- windows下启动mysql服务
- 使用 CSS 预处理器的优缺点有哪些?(SASS,Compass,Stylus,LESS) 描述下你曾经使用过的 CSS 预处理的优缺点。
- poj 2777 Count Color
- C++ Primer复习和学习笔记 第七章 函数
- vector的clear()和swap()比较
- C++ Primer复习和学习笔记 第八章 标准IO库
- RuntimeException异常
- 如何挖掘关键词
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop