ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:28.21KB ,
资源ID:18367903      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18367903.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第14章 输入与输出流类库Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第14章 输入与输出流类库Word文档下载推荐.docx

1、trunc删除文件现有内容(是ios:out的默认操作)nocreate如果文件不存在,则文件打开失败noreplace如果文件存在,则文件打开失败nProt是文件保护方式,它的选择项见表14.2。表14.2 文件保护方式选择项filebuf:openprot兼容共享方式sh_none独占,不共享sh_read允许读共享file:sh_write允许写共享由于C+把文件看作是无结构的字节流,所以为了在文件中记录特定结构的内容,必须给文件加上记录结构。下面的程序演示了班级学生成绩表,学号作为记录关键字,文件按学号顺序建立和维护。假定用户按学号顺序键入记录,程序将把键入的记录保存并写入文件。程序示

2、例如下。例14.4 文件流操作实例/演示文件流操作#include stdafx.h#includeint main() int regNumber; char name30; float grade; /使用ofstream类的构造函数打开文件 ofstream outGradeFile(C:grade.dat,ios:out);/也可以先创建输出流类对象,再用open操作打开文件/ofstream outGradeFile;/outGradeFile.open( if(!outGradeFile) cerr文件不能被打开!endl; exit(1);/函数原形定义在stdlib.h中 co

3、ut请输入学号,姓名,和成绩,n regNumbernamegrade) outGradeFileregNumbername graden cout inGradeFile.close(); return 0; /ofstream的析构函数将关闭文件程序运行结果如下:请输入学号,姓名,和成绩, ?123 aaa 78234 bbb 89345 ccc 69Z上例中,对于文件名要说明其路径,斜杠要双写,因为编译器理解下的斜杠是字符转换符。这和包含头文件时的路径不一样,因为包含头文件是由编译预器处理的。文件打开时,对于使用ofstream类构造对象时,其打开方式默认为ios:out|ios:tru

4、nc,即该文件每次打开,如果原先存在,则都会先被清空内容,否则就新建。如果要打开二进制文件,写方式,输出到文件尾,可以如下操作:ofstream bfile(“binfile”,ios:binary|ios:ate);也可以生成oftream对象而不打开特定文件,而在后面再将文件与对象相连接。可以如下操作:ofstream outFile;outFile.open(“abc.dat”,ios:如果需要打开一个输入文件,从文件中读取数据可以如下操作:ifstream myinf(“C:grade.dat”,ios:nocreate);if(myinf.fail()cerrgrade;对于打开文件

5、是否操作成功,可以使用重载的ios运算符成员函数!操作符确定打开是否成功,如果打开操作的流将failbit或badbit置位,则条件(!outGradeFile)返回非0值(true);也可以通过判断fail()成员函数来确定打开文件是否出错。如果打开文件同时用于输入和输出,则可以如下操作:fstream myinout(“abc.dat”,ios:in|ios:用fstream打开的文件,打开方式不能默认。14.3 串流类(不讲)ostrstream、istrstream、strstream是串流类,在strstrea.h中定义。其中,strstream类是从ostrstream和istrs

6、tream类多重继承而来的子类。要定义一个串流类对象,须提供字符数组和数组大小。类istrstream用于串流输入,该类有几个构造函数,其中最有用的是:istrstream:istrstream(const char* pch);istrstream(const char* pch,int nLength);第一个参数指出字符串数组,第二个参数说明数组大小。当size为0时,表示把istrstream类对象连接到由pch指向的以空字符结束的字符串。类ostrstream用于执行串流输出,该类也有几个构造函数,其中最有用的是:ostrstream:ostrstream(char* pch,int

7、 nLength,int nMode=ios:第一个参数指出字符串数组,第二个参数说明数组大小,第三个参数指出打开方式。下面的实例演示了如何使用串流输入输出功能。例14.5 串流输入输出功能实例/演示串流输入输出功能strstrea.hstring.hchar* parseString(char* pch) int number; float balance; /计算需要构造的串流类的长度 /strlen返回字符串长度,其定义包含在string.h中 int nLength=strlen(帐号:) +strlen( 收支: +strlen(pch); istrstream inp(pch,0)

8、; /ios:in方式,读到null结束 inpnumberbalance; /从串流中读入一个整数和浮点数 char *pBuffer=new charnLength; ostrstream outp(pBuffer,nLength);/ios:out方式,字串长度为计算出的nLength, /刚好满足输出到pBuffer中的长度要求 outpnumber /写入pBuffer中 /注意该处如果写入超出pBuffer空间长度的字符, /超出部分将不会被写入 return pBuffer; char *pch=1001 125.45 char *pBuf=parseString(pch);pB

9、uf delete pBuf;演示结果如下:1001 收支:125.45在函数parseString()中,先定义了一个输入串流对象inp,将输入设备pch中的字符输入到了一个整数和一个浮点数中,然后,定义了一个输出串流对象outp,将提示信息和这两个变量输出到outp连接的输出设备(实际为一字符串空间)pbuffer中。注意语句:outp int n;输入一个十进制整数: cinn;n的十六进制为:hexdec的八进制为:oct cout.flags(10);恢复十进制为:1515的十六进制为: f15的八进制为: 1714.4.2设置浮点数精度控制浮点流的精度,可以使用控制符setprec

10、ision或成员函数precision来格式化小数点后面的位数。语句:coutsetprecision(4)fValue;和语句:cout.precision(4);起到了同样的效果,都将浮点型数据fValue按精确到小数点后面4位数输出。14.4.3 设置域宽成员函数ios:width设置当前的域宽(即输入输出的字符数)并返回以前设置的域宽。如果显示数据所需的宽度比设置的域宽小,空位用填充字符填充。如果显示数据所需的宽度比设置的域宽大,显示数据并不会被截断,而是输出所有位,但可能会出现乱码。控制符setw也可以用来设置域宽。它们的用法如下:cout.width(8);10;上面的语句将在输出

11、10之前输出6个空格(默认填充符)。setw(8)这条语句可以起到同样的效果。需要注意的是setw(n)或width(n)在下一个域输出后,域宽回到原先的默认值。setw()的默认域宽为0,意思是按输出对象的表示宽度输出。下面的语句中,20将紧挨着10输出。1020;14.4.4 设置填充符可以使用成员函数fill或控制符setfill来改变所要填充的字符。cout.fill(*);输出结果为:*10由于输出域宽为8,所以在10前面填充了6个*。下面的语句将起到同样的效果。setfill(*)set(8)14.4.5 用户自定义流格式控制符C+提供了非常多的流格式控制符和成员函数来格式化流输入

12、/输出。上面仅介绍了常用的几种控制和成员函数的使用方法。在这里,再简单介绍一种用户自定义流控制符的方法。先看下面的程序示例:例14.7 用户自定义流格式控制符实例/演示用户自定义流格式控制符/警告符,输出时会发出系统警告声音ostream& bell(ostream& output) return output a/回车符 ret(ostream&r/水平制表符,是光标移到下一个制表位 tab(ostream&t/换行符 endLine(ostream& output) return outputflush;测试制表符:endLineatabbc测试回车符和警告符:endLine.bell;r

13、et-endLine;a b c-.在上面的例子中,演示了如何建立和使用新的流控制符bell、ret、tab和endLine。需要注意的是,程序用endLine插入输出了换行符,然后输出7个省略号.,输出系统警告声,再插入ret回车,再输出5个破仄号-,结果省略号被破仄号覆盖了前面部分。14.5 流类成员函数的使用在C+中,经常使用cin、cout来做输入/输出。比较常用的I/O流的成员函数有get、getline、put、eof等。Get函数原型有很多个,比较常用的函数原型有:char istream:get();istream& istream:get(char* pch, int nCo

14、unt,char delim=n”); get( char& rch );不带参数的get函数从指定的输入流中读取一个字符(包括空白字符),并返回该字符,当遇到输入流中的文件结束符时,返回EOF。带一个字符型参数的get成员函数自动读取一个字符(包括空白字符)到字符型参数中。当遇到文件结束符时,返回0,否则返回对istream对象的引用。带三个参数的get成员函数的参数分别是接收字符的字符数组、字符数组的大小和分隔符(默认值为n)。该函数或者在读取比指定的最大字符数少一个字符后结束,或者在遇到分隔符时结束。下面的程序循环读入字符,直到用户键入一个Y字符,或遇到文件结束符(在UNIX与Macin

15、tosh上,文件结束符为-d,在PC与VAX上文件结束符为 char ch; while(!cin.eof() ch=cin.get(); ch=toupper(ch); if(ch=Y cout.put(ch); break; ch;上例中使用了toupper函数将键入字符全部转换成大写字母后赋值给ch,使用该函数应包含头文件ctype.h。使用带三个参数的get函数,会比较安全。例如下面这种代码:istream fin(“abc.dat”);char buf80;finbuf;应改成:istream fin(“abc.dat”;fin.get(buffer,80);getline成员函数原

16、型为:getline(char* pch, int nCount,char delim=n”);getline函数与带三个参数的get函数类似,它读取一行信息到字符数组中,然后插入一个空字符。所不同的是,getline要去除输入流中的分隔符(即读取字符并删除它),但是不把它存放在字符数组中,而三个参数的get函数不把分隔符放在数组中,却仍然将它保留在输入流中。下面的程序演示了两者之间的区别:例14.9演示get、getline的区别实例/演示get、getline的区别 char str128; char lineStr128;使用get函数,请用键盘输入下面这行字符后按回车:nThis is A Line cin.get(str,sizeof(str),A);First line:str cin.get(str,sizeof(str);Second line:使用getline函数,请用键盘输入下面这行字符后按回车: cin.getline(lineStr,sizeof(lineStr),lineStrobj.nameobj.addr) outGradeFile.write(char *)&obj,sizeof(struct st)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1