




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计实习,郭炜微博,信息科学技术学院,1,输入和输出,信息科学技术学院程序设计实习郭炜刘家瑛,2,与输入输出流操作相关的类,ios,istream,ostream,ifstream,iostream,ofstream,fstream,3,istream是用于输入的流类,cin就是该类的对象。ostream是用于输出的流类,cout就是该类的对象。ifstream是用于从文件读取数据的类。ofstream是用于向文件写入数据的类。iostream是既能用于输入,又能用于输出的类。fstream是既能从文件读取数据,又能向文件写入数据的类。,与输入输出流操作相关的类,4,标准流对象,输入流对象:cin与标准输入设备相连输出流对象:cout与标准输出设备相连cerr与标准错误输出设备相连clog与标准错误输出设备相连缺省情况下cerrHello,worldendl;clogHello,worldendl;和cout“Hello,world”xy;freopen(test.txt,w,stdout);/将标准输出重定向到test.txt文件if(y=0)/除数为0则在屏幕上输出错误信息cerrerror.endl;elsecoutfn;coutf,nx).return0;如果是从文件输入,比如前面有freopen(“some.txt”,”r”,stdin);那么,读到文件尾部,输入流就算结束如果从键盘输入,则在单独一行输入Ctrl+Z代表输入流结束,判断输入流结束,9,istream从输入流中读取bufSize-1个字符到缓冲区buf,或读到碰到delim字符为止(哪个先到算哪个)。两个函数都会自动在buf中读入数据的结尾添加0。,n或delim都不会被读入buf,但会被从输入流中取走。如果输入流中n或delim之前的字符个数达到或超过了bufSize个,就导致读入出错,其结果就是:虽然本次读入已经完成,但是之后的读入就都会失败了。可以用if(!cin.getline()判断输入是否结束,istream类的成员函数,10,booleof();判断输入流是否结束intpeek();返回下一个字符,但不从流中去掉.istream从流中删掉最多nCount个字符,遇到EOF时结束。,istream类的成员函数,11,#includeusingnamespacestd;intmain()intx;charbuf100;cinx;cin.getline(buf,90);coutbufendl;return0;,istream类的成员函数,输入:12abcd输出:abcd(空格+abcd)输入12程序立即结束,无输出:因为getline读到留在流中的n就会返回,12,流操纵算子,整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子使用流操纵算子需要#include,流操纵算子,整数流的基数:流操纵算子dec,oct,hexintn=10;coutnendl;couthexn“n”decn“n”octnendl;输出结果:10a1012,控制浮点数精度的流操纵算子,precision,setprecisionprecision是成员函数,其调用方式为:cout.precision(5);setprecision是流操作算子,其调用方式为:coutsetprecision(5);/可以连续输出它们的功能相同。指定输出浮点数的有效位数(非定点方式输出时)指定输出浮点数的小数点后的有效位数(定点方式输出时)定点方式:小数点必须出现在个位数后面,浮点数输出最多6位有效数字,#include#includeusingnamespacestd;intmain()doublex=1234567.89,y=12.34567;intn=1234567;intm=12;coutsetprecision(6)xendlyendlnendlm;,控制浮点数精度的流操纵算子,输出:1.23457e+00612.3457123456712,以小数点位置固定的方式输出,#include#includeusingnamespacestd;intmain()doublex=1234567.89,y=12.34567;intn=1234567;intm=12;coutsetiosflags(ios:fixed)setprecision(6)xendlyendlnendlm;,控制浮点数精度的流操纵算子,输出:1234567.89000012.345670123456712,取消以小数点位置固定的方式输出,#include#includeusingnamespacestd;intmain()doublex=1234567.89;coutsetiosflags(ios:fixed)setprecision(6)xendlresetiosflags(ios:fixed)setw(4);或者cin.width(5);coutstring)cout.width(w+);coutstringendl;cin.width(5);宽度设置有效性是一次性的,在每次读入和输出之前都要设置宽度。,输入:1234567890输出:1234567890,#include#includeusingnamespacestd;intmain()intn=141;/1)分别以十六进制、十进制、八进制先后输出ncout1)hexndecnoctnendl;doublex=1234567.89,y=12.34567;/2)保留5位有效数字cout2)setprecision(5)xyendl;/3)保留小数点后面5位cout3)fixedsetprecision(5)xyendl;/4)科学计数法输出,且保留小数点后面5位cout4)scientificsetprecision(5)xyendl;,1)8d1412152)1.2346e+00612.3463)1234567.8900012.345674)1.23457e+0061.23457e+001,/5)非负数要显示正号,输出宽度为12字符,宽度不足则用*填补cout5)showposfixedsetw(12)setfill(*)12.1endl;/6)非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充cout6)noshowpossetw(12)left12.1endl;/7)输出宽度为12字符,宽度不足则左边用填充字符填充cout7)setw(12)right12.1endl;/8)宽度不足时,负号和数值分列左右,中间用填充字符填充cout8)setw(12)internal-12.1endl;cout9)12.1endl;return0;,5)*+12.100006)12.10000*7)*12.100008)-*12.10000,用户自定义流操纵算子,ostream输出:aabb为什么可以?,用户自定义流操纵算子,因为iostream里对进行了重载(成员函数)ostream该函数内部会调用p所指向的函数,且以*this作为参数hex、dec、oct都是函数,数据的层次,位bit字节byte域/记录例如:学生记录intID;charname10;intage;intrank10;我们将所有记录顺序地写入一个文件,称为顺序文件。,文件和流,可以将顺序文件看作一个有限字符构成的顺序字符流,然后像对cin,cout一样的读写。回顾一下输入输出流类的结构层次:,ios,istream,ostream,ifstream,iostream,ofstream,fstream,建立顺序文件,#include/包含头文件ofstreamoutFile(“clients.dat”,ios:out|ios:binary);/打开文件ofstream是fstream中定义的类outFile是我们定义的ofstream类的对象“clients.dat”是将要建立的文件的文件名ios:out是打开并建立文件的选项ios:out输出到文件,删除原有内容ios:app输出到文件,保留原有内容,总是在尾部添加ios:binary以二进制文件格式打开文件,建立顺序文件,也可以先创建ofstream对象,再用open函数打开ofstreamfout;fout.open(test.out,ios:out|ios:binary);判断打开是否成功:if(!fout)cerr“Fileopenerror!”x)v.push_back(x);sort(v.begin(),v.end();for(inti=0;iv.size();i+)destFilevis.szNames.nScore)if(stricmp(s.szName,exit)=0)/名字为exit则结束break;OutFile.write(char*),输入:Tom60Jack80Jane40exit0则形成的students.dat为72字节,用记事本打开,呈现:Tom烫烫烫烫烫烫烫烫Jack烫烫烫烫烫烫烫蘌Jane烫烫烫烫烫烫烫?,二进制文件读写,/下面的程序将students.dat文件的内容读出并显示#include#includeusingnamespacestd;classCStudentpublic:charszName20;intnScore;,intmain()CStudents;ifstreaminFile(students.dat,ios:in|ios:binary);if(!inFile)couterrorendl;return0;while(inFile.read(char*),输出:Tom60Jack80Jane40,二进制文件读写,/下面的程序将students.dat文件的Jane的名字改成Mike#include#includeusingnamespacestd;classCStudentpublic:charszName20;intnScore;,输出:Tom60Jack80Mike40,intmain()CStudents;fstreamiofile(c:tmpstudents.dat,ios:in|ios:out|ios:binary);if(!iofile)couterror;return0;iofile.seekp(2*sizeof(s),ios:beg);/定位写指针到第三个记录iofile.write(Mike,strlen(Mike)+1);iofile.seekg(0,ios:beg);/定位读指针到开头while(iofile.read(char*),显式关闭文件,ifstreamfin(“test.dat”,ios:in);fin.close();ofstreamfout(“test.dat”,ios:out);fout.close();,例子:mycopy程序,文件拷贝,/*用法示例:mycopysrc.datdest.dat即将src.dat拷贝到dest.dat如果dest.dat原来就有,则原来的文件会被覆盖*/#include#includeusingnamespacestd;intmain(intargc,char*argv)if(argc!=3)coutFilenamemissing!endl;return0;,ifstreaminFile(argv1,ios:binary|ios:in);/打开文件用于读if(!inFile)coutSourcefileopenerror.endl;return0;ofstreamoutFile(argv2,ios:binary|ios:out);/打开文件用于写if(!outFile)coutNewfileopenerror.endl;inFile.close();/打开的文件一定要关闭return0;,charc;while(inFile.get(c)/每次读取一个字符outFil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诺如病毒知识培训方案课件
- 请求课件的话术
- 2025外国商业合同是否可以非书面方式订立?合同形式要求解析
- 语言文字规范知识培训课件
- 红酒品鉴讲解课件
- 红薯栽种理论知识培训课件
- 红色血栓课件
- 技术方案书与投标文件编写规范
- 农村区域遥感技术应用服务协议
- 红楼梦香菱课件
- 电子线产品成本分析表
- 《全面质量管理》习题集(新时代全面质量管理知识普及教育全国指定教材)
- 四年级上册部编版作文教学计划
- 餐饮空间案例分析
- 第三章卫星链路设计
- 沪科版九年级物理导学案(全册)
- 计算流体力学完整课件
- 知名投资机构和投资人联系方式汇总
- 生产安全事故应急救援演练记录
- 2023版初中化学跨学科实践活动(化学)
- 《新能源汽车驱动电机及传动技术》课程教案
评论
0/150
提交评论