c++输入输出流及文件操作详解.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章输入输出流7.1流类和流对象7.2标准IO流和流对象7.3格式控制7.4文件处理本章内容-第一讲1、输入输出流的含义流类与流对象2、标准输入输出流标准IO流对象IO流成员函数-get(),getline()与-put(),流状态及函数–clear(),good(),eof()本章内容-第二讲3、文件流及文件操作文件的概念数据流动方向,文本文件与二进制文件文件流类与文件流对象文件的打开与关闭打开方式顺序读写/随机读写操作文件指针文件操作成员函数,,put,get(),getline(),read(),write()第7章输入输出流流(stream)表示信息从源到目的端的流动,负责建立数据生产者和消费者之间的联系,数据按顺序从一个对象传送到另一对象。……C++中把数据之间的传输操作称作”流”I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。程序中,对数据的输入/输出是以字节流实现的应用程序对字节序列作出各种数据解释.C++的输入输出流是指由若干字节组成的字节序列流中的内容可以是ASCII字符、图形图像、数字音频视频等形式的信息。7.1IO流7.1IO流I/O流类库提供对象之间的数据交互服务输出流Outputstream:数据从内存传送到某个载体或设备中;输入流Inputstream:数据从某个载体或设备传送到内存中;____________________内存____________________输入数据输出数据7.1.1缓冲区缓冲区buffer是内存中的一个临时存储区,用来匹配不同部件数据传输率的差异。通过使用缓冲的方式可以更高效地处理输入输出,信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地。在C++中输入输出流被定义为类,I/O库中的类称为流类,编译系统提供了用于输入输出的iostream类库。流类中的常用类的继承层次关系7.1.2流类(1)标准流提供通用输入输出操作,作为其他I/O流基类系统指定的标准设备的I/O操作。(2)文件流以外存中的文件为对象进行输入和输出。以文件为对象的输入输出,包括从磁盘文件输入数据,或将数据输出到磁盘文件。(3)字符串流对内存中指定空间进行输入和输出。通常指定一个字符数组作为存储空间。7.1.2流类iostream.h包含操作所有输入/输出流所需的基本信息istream.h,ostream.hiomanip.h包含格式化I/O操纵算子,用于指定数据输入输出的格式fstream.h处理文件信息,包括建立文件,读/写文件的各种操作接口每一种C++版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能7.1.2头文件I/O流类库预定义了一批流对象,连接常用的外部设备.程序员可以定义所需的I/O流对象,使用流库提供的工作方式实现数据传输。流类对象可以建立和删除,可从流中获取数据和向流添加数据。7.1.3流对象istreamcinostreamcout输入流对象____________________内存____________________输出流对象7.2标准流对象及常用成员函数标准流对象是在std命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。声明在头文件iostream7.2.1标准输出流coutostream类的对象(consoleoutput)通常连向显示器,可以重定向(关联至文件)在输出流类中重载的一组公用成员函数,实现安全便捷的输出基本数据类型,输出自定义类型对象需要单独重载ostream&operator(基本类型标识符);cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据。流插入运算符标准错误流对象cerr(consoleerror)标准错误流对象clog(consolelog的)作用都是在标准输出设备上显示出错信息,两个对象一般关联显示进行器输出。区别是cerr不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时输出。7.2.1标准输出流cerr“Zeroencountered.“endl;7.2.1标准输出流ostream类的公有成员函数函数功能put无格式,插入一个字节write从无格式,插入一字节序列flush刷新输出流seekp移动输出流指针tellp返回输出流中指定位置的指针值operstor插入运算符ostream&put(charch);7.2.2标准输入流cinistream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“”从流中提取数据。7.2.2标准输入流cinistream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“”从流中提取数据。在istream流类重载中的一组公用成员函数istream&operator(基本类型标识符&);流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符才能从中提取数据。函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符,不包括空格、Tab和回车分隔符istream类的公有成员函数流插入运算符,可用于输入基本类型数据,流提取运算符,可用于输入基本类型数据,也可重载用于输出和输入用户自定义的数据类型7.2.3重载流插入和流提取运算符重载函数形式:ostream&operator(ostream&out,T&data);istream&operator(istream&in,T&data);•注意:只能将重载“”和“”的函数作为友元函数。自定义类classArray{public:Array(intsize=1);~Array();int&operator[](inti);friendostream&operator(ostream&out,Array&a);friendistream&operator(istream&in,Array&a);private:int*element;intlen;};例为数组类重载流插入运算符和提取运算符Arraya(5);cina;couta;6.3.4重载流插入和流提取运算符ostream&operator(ostream&output,Array&ary){for(inti=0;iary.len;i++)outputary[i];outputendl;returnoutput;}使用重载版本访问对象coutaendl;cout的别名istream&operator(istream&input,Array&ary){for(inti=0;iary.len;i++)inputary[i];returninput;}返回流类引用,符合原语义cinarr1arr2;cin的别名函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream类的公有成员函数7.2.4输入流操作intistream::get();//charc=cin.get();istream&istream::get(char&rch);//cin.get(c);ostream&put(charch);get.cpp函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream类的公有成员函数7.2.4输入流操作istream&get(char*pch,intnCount,chardelim='\n');istream&getline(char*pch,intnCount,chardelim='\n');其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。读取完成后,从流中删除该终止符。Get_getline.cpp7.2.4输入流操作//字符串的输入charch1[20],ch2[20],ch3[20],ch4[20];cinch1;coutch1endl;cin.get(ch2,10);coutch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,'.');coutch4endl;函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream&ignore(intnCount=1,intdelim=EOF);istream类的公有成员函数7.2.4输入流操作标识常量值意义ios::goodbit0x00状态正常ios::eofbit0x01文件结束符,当文件结尾时设置该标志ios::failbit0x02I/O操作失败,数据未丢失,可以恢复ios::badbit0x04非法操作,数据丢失,不可恢复00000000000000000000000000000001000000000000001000000000000001007.2.5流错误状态所有流都把流的状态存储在状态字中不同标志位中存储不同的错误状态位包含在类ios的enum成员中ios处理流错误状态的公有成员函数函数功能inteof()const;返回eofbit状态值。文件结束符时返回1,否则返回0intfail()const;返回failbit状态值intbad()const;返回badbit状态intgood()const;eofbit、failbit和badbit都没有被设置,则返回1intrdstate()const;返回状态字voidclear(intn=0);恢复或设置状态字7.2.4流错误状态运行程序,观测结果grade.cppstreamstate.cppios提供直接设置标志字的控制格式函数iostream和iomanip库还提供控制符简化I/O格式化操作(自学内容)7.3格式控制ios类——格式化标志格式化标志是类定义的枚举集合,用来指定输入输出格式化和操作的不同选择。该枚举类型定义:enum{skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio};引用格式化标志:ios::格式化标志7.3.1设置标志字状态标志值含义输入/输出skipws0X0001跳过

1 / 88
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功