版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章输入输出流STL中I/O流类标准输入输出流前修课文件输入输出流前修课字符串输入输出流1/33STL:提供若干个类模板,实现输入输出功能。位于std命名空间内:usingnamespacestd;使用灵活、方便,功能强大标准I/O流类istream,ostream,iostream文件I/O流类ifstream,ofstream,fstream字符串I/O流类istringstream,ostringstream,stringstreamSTL中I/O流类2/33标准输入输出流对象cin,cout,重载运算符>>和<<标准输入输出流类空白字符空格/换行/TAB…数据分隔符,>>跳过这些空白字符。如何改进程序?3/33流对象的get系列成员函数int
get();
//无参数功能:读一个字符(含空白字符)返回:该字符的ASCII值(int)
get(char*ch,intn,charc='\n');
//3个参数
getline(char*ch,intn,charc='\n');功能:读n-1个字符(含空白字符),存入字符数组
ch;遇终止字符c提前结束区别:get遇终止字符时,读位置停留在终止符前,
下次从该位置读取;getline则跳过终止符。返回:输入流对象*thisget系列成员函数4/33intmain(){charch[20]; cout<<"输入字符串:";//Howareyou?
intn=cin.get();cout<<n<<endl;
cin.getline(ch,20);
cout<<"该字符串是:"<<ch<<endl;cout<<"输入字符串:";//12345\7890
cin.getline(ch,20);
//cin.getline(ch,20,'\\');cout<<"该字符串是:"<<ch<<endl;return0;}get系列流成员函数例把上面getline都改为get,输出?5/33问题引入本要输入int数据,结果输入含有其他字符,如何发现和处理这类错误呢?用相关成员函数booleof()返回true:已到达流的末尾boolfail()返回true:I/O操作失败,遇到非法数据(如读取数字时遇到其他字符),流可以继续使用。boolbad()返回true:遇致命错误(物理的),流不能使用。利用流错误信息6/33intmain(){
inta;cout<<"请输入一个整数:";while(1)
{cin>>a;//要求输入整数
if(cin.fail()) {//--------输入数据非法----------- cout<<"输入有错!请重新输入"<<endl;
cin.clear();
//清除流所有标志位
cin.sync();
//清空流缓冲区
}else//---输入数据合法-----------
{cout<<a<<endl;break;}}}例:流错误信息这样写的保护代码并不好!逐个字符判断是否数字。7/33文件I/O流类二进制文件与文本文件二进制文件——字节序列
文件数据与内存数据的格式相同。shortint:5678
内存格式:0001011000101110
存入文件
2字节
每个字节不对应一个字符
人不能阅读(乱码)文本文件——字符序列用某编码ASCII,UNICODE,…把内存数据转换为字符序列后
存入文件。举例:shortint:5678转换为字符序列5678
4字符存入文件4字节
十进制ASCII:5(53),6(54),7(55),8(56)
00110101001101100011011100111000
5
6
788/33文件流类流对象与某个文件绑定/关联后,流对象即该文件。读写该流对象,就是读写该文件cin:系统定义的流对象,绑定为键盘设备文件cout:系统定义的流对象,绑定为屏幕设备文件ofstream:输出类,写文件:内存→文件ifstream:输入类,读文件:内存←文件fstream:
I/O类,读/写文件头文件#include<fstream>文件I/O流类9/33读写文件的三步打开文件
选择文件流类,创建流对象,与文件绑定读写文件写(Output):内存变量→文件读(Input):内存变量←文件关闭文件读写文件完毕后,及时关闭文件下面讲述具体操作读写文件的步骤10/30打开文件创建流对象的同时打开文件
ifstream
in("test.dat",ios::in);创建流对象后,用open成员函数打开
ofstream
out1,out2;out1.open("d:\\test.dat",ios::out);out2.open("..\\test.dat",ios::out);文件名(含路径)
文件名包含路径(绝对路径/相对路径/缺省路径)
可用字符串变量保存文件名,例如:
charfilename[]="d:\\test.dat";
in.open(filename,ios::in);打开文件缺省路径绝对路径相对路径11/30打开文件方式标志的组合举例ios::in|ios::binary二进制方式,读文件ios::out|ios::binary二进制方式,写文件ios::in|ios::out
文本文件方式,可读写
ios::in|ios::out|ios::binary
二进制方式,可读写多个标志共用一个32bits
整数的若干位标志位组合:|
文件打开标志12/30检查文件打开是否成功方式一用流对象的成员函数fail检查
ifstream
in;in.open("test.dat",ios::in)if(in.fail()==true)cout<<"打开文件失败";elsecout<<"打开文件成功";检查文件打开13/30方式二
检查流对象是否等于0if流对象=0,打开失败
else,打开成功---------------------------------------------------
ifstreamin("test.dat",ios::in);if(in==0)//if(!fin)cout<<"打开文件失败";elsecout<<"打开文件成功";检查文件打开14/30文件操作完后应及时关闭,同时打开的文件数有限文件关闭解除流对象与文件的绑定/关联。解绑后,该流对象还可与其他的文件绑定。举例:ofstreamout("demo.txt",ios::out);//out与demo.txt文件关联...…;out.close();//用完后及时关闭out.open("test.dat",ios::out|ios::binary);//out与test.dat文件关联关闭文件15/30读写文本文件写入文本文件:<<流插入符读取文本文件:
>>流提取符与cout<<,cin>>用法和效果一样cin,cout
换成了文件流对象关联某文件>>读文本文件①有字符转换;②忽略空白字符不希望字符转换:用二进制函数read
不希望忽略空白字符:用函数get,getline读写文本文件16/30<<写文本文件例<<
可输出不同类型的数据\t输出数据对齐
tab制表符endl输出\n回车符17/33getline()
读文本文件例18/33读写二进制文件任何类型文件均可用二进制方式读写不用<<
和>>读写字符转换——不希望的文件打开方式默认为文本方式in.open("myfile.dat",ios::in|ios::binary);二进制文件读写函数ostream&file.write((char*)buffer,intlen);istream&file.read((char*)buffer,intlen);file流对象
buffer内存块首地址 len读写字节数,sizeof(…)获得char*按字节读写
读写二进制文件filebufferwriteread19/30举例:读写二进制文件20/33举例:读写二进制文件21/33随机访问文件顺序访问文件:从头至尾读写文件随机访问文件:从文件内任意位置处开始读写注意:文本文件存在字符转换文件位置指示符(文件指针)定义:文件的当前读写位置,存在于流对象内部文件读写过程:
每读写一个字节,文件指针前移一个字节
前移:文件头→尾方向移动随机读写文件22/30移动文件指针,实现随机读写文件ostream&seekp(long,int)//p:put,写文件用
istream&seekg(long,int)//g:get,读文件用
移动文件指针到指定位置:(long,int)int
取值:ios::beg文件头ios::end
文件尾
ios::cur
目前位置(current)long
取值:偏移量(字节)232=4GB
正数
:文件指针→向文件尾移动的字节数
负数
:文件指针←向文件头移动的字节数随机读写文件的函数文件头文件尾当前位置-+23/30移动文件指针例:
out.seekp(20L,ios::beg);//out:流对象获得文件指针longtellp()//写文件用longtellg()//读文件用
返回
值:
//232=4GB——现在的读写位置(相对文件头的字节数)——0:文件头用以上流成员函数,即可实现文件随机读写随机读写文件的函数24/30例:随机读写文本文件光标在这25/30#include<iostream>#include<fstream>usingnamespacestd;voidmain()
{
ifstreamfile("demo.txt",ios::in);if(!file){cout<<"文件打开失败";return;}
longoffset;//偏移量
charch;
//当前读取的字符
int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年新型能源发电项目投资合作协议
- DB4116T 040-2023 黄花菜采收保鲜技术规程
- DB4114T 218-2023 规模肉牛场生物安全防控技术规范
- 2024年新农村土地租赁协议
- 2024年房屋租赁协议:让租住更简单
- 2024年批发市场西瓜采购协议
- 2024年度餐饮公司与食材供应商采购合同
- 2024年收购双方保密合同
- 2024年房产买卖合同公证
- 2024互联网企业广告投放与媒体采购合同
- 广东省广州市四校2024-2025学年九年级上学期11月期中化学试题(含答案)
- 浙江省杭州市2023-2024学年高二上学期期末学业水平测试政治试题 含解析
- 科技公司研发项目风险防控制度
- 2024年全国企业员工全面质量管理知识竞赛活动题库(完整)
- 【课件】Unit+4+Section+B+1a-1d+课件人教版英语七年级上册
- 海南省申论真题2022年(C类行政执法)
- 大数据行业分析报告
- (5篇)国开2024年秋形策大作业:中华民族现代文明有哪些鲜明特质?建设中华民族现代文明的路径是什么
- 错牙合畸形的早期矫治(口腔正畸学课件)
- 江苏省徐州市沛县第五中学2024-2025学年九年级上学期11月期中考试数学试题
- 2024年中国酶免试剂市场调查研究报告
评论
0/150
提交评论