C实用教程郑阿奇主编.ppt

上传人:max****ui 文档编号:11494709 上传时间:2020-04-25 格式:PPT 页数:39 大小:315.50KB
返回 下载 相关 举报
C实用教程郑阿奇主编.ppt_第1页
第1页 / 共39页
C实用教程郑阿奇主编.ppt_第2页
第2页 / 共39页
C实用教程郑阿奇主编.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
第14章输入/输出流,14.1概述,14.1.1流和流类,在C+中,输入/输出操作是由“流”来处理的。流是C+的一个核心概念,数据从一个位置到另一个位置的流动抽象为流。,14.1.2标准流对象,C+提供了4个预定义的标准流对象:cin、cout、cerr和clog,它们都是std名称空间的流对象。其中,cin是istream类的对象,用来处理标准输入,即键盘输入;cout是ostream类的对象,用来处理标准输出,即屏幕输出;cerr和clog都是ostream类的对象,用来处理标准出错信息,并将信息显示在屏幕上,14.1.3提取和插入运算符重载,#includeusingnamespacestd;classCStudent;ostream,ostream,14.2格式控制和错误处理,两种格式控制方式:一种是使用ios类中的相关成员函数,如width()、presision()和fill()等;另一种是直接使用的格式操作算子,如oct、hex和dec等,14.2.1设置输出宽度和填充字符,#include#include/必须要有此头文件包含usingnamespacestd;intmain()intnNum=1234;doublefNum=12.3456;cout1234567890endl;coutsetw(10)nNumn;coutsetw(10)nNum-fNumendl;coutsetw(10)nNumsetw(10)fNumendl;coutsetw(10)setfill(#)nNumendl;coutsetw(10)fNumendl;return0;,14.2.2控制实数显示,#include#includeusingnamespacestd;intmain()doubled=13.0/17.0;coutdendl;coutsetprecision(1)dendlsetprecision(0)dendlsetprecision(3)dendlsetprecision(5)dendl10.0endl;coutsetiosflags(ios:scientific)dendld*10.0endl;coutsetprecision(6)setiosflags(ios:scientific)dendl;coutsetiosflags(ios:fixed)dendl;return0;,14.2.3左右对齐输出,例Ex_Left数据的对齐方式示例。#include#includeusingnamespacestd;intmain()intnNum=1234;cout1234567890setfill(#)endl;coutsetw(10)nNumendl;coutsetw(10)-nNumendl;coutsetiosflags(ios:left)setw(10)nNumendl;coutsetw(10)-nNumi;s=cin.rdstate();return0;,14.3使用输入/输出成员函数,如果想要使输入/输出控制更为细致,如希望把输入的空格作为一个字符而不是分隔符,就需要使用istream类和ostream类中的相关成员函数。,14.3.1输入操作的成员函数,(1)使用get和getline函数用于输入字符或字符串的成员函数get原型如下:intget();istream第一种形式是从输入流中提取一个字符,并转换成整型数值。第二种形式是从输入流中提取字符到rch中。第三种形式是从输入流中提取一个字符串并由pch返回,例Ex_GetAndGetLineget和getline的使用示例。,#includeusingnamespacestd;intmain()chars180,s280,s380;cout请输入一个字符:;coutcin.get()endl;cin.get();/提取换行符cout请输入一行字符串:;for(inti=0;i80;i+)cin.get(s1i);if(s1i=n)s1i=0;break;/退出for循环couts1endl;cout请输入一行字符串:;cin.get(s2,80);couts2endl;cin.get();/提取换行符cout请输入一行字符串:;cin.getline(s3,80);couts3endl;return0;程序运行结果如下:,(2)使用read函数。read函数不仅可以读取字符或字符串(称为文本流),而且可以读取字节流。其原型如下:istream,例Ex_Readread函数的使用示例。,#includeusingnamespacestd;intmain()chardata80;cout请输入:endl;cin.read(data,80);datacin.gcount()=0;coutendldataendl;return0;程序运行结果如下:,14.3.2输出操作的成员函数,ostream类中用于输出的成员函数有put和write,它们的原型如下:ostream,14.4文件流,C+中,“文件”有两种含义,一种是指一个具体的外部设备,称为设备文件,如可以把打印机看作一个文件,也可把屏幕看成一个文件;另一种是指一个磁盘文件,即存放在磁盘上的文件,每个文件都有一个文件名。无论是设备文件还是磁盘文件,在C+中都看成是文件流,并提供了相应的流库。,14.4.1文件和文件流概述,无论是文本文件还是二进制文件,都需要用文件指针来操纵。一个文件指针总是和一个文件相关联C+提供了文件操作的文件流库,14.4.2文件流的使用方法,文件操作一般是按定义文件流对象、打开文件、读/写文件、关闭文件这4个步骤进行的1.定义文件流对象文件的操作通常有三种方式,即只读、只写和读写方式Xstream对象;,2.使用成员函数open打开文件打开文件有两种方式:一种是调用文件流成员函数open,另一种是在定义文件流对象时通过构造函数打开文件第一种打开方式,使用成员函数open打开文件在ifstream、ofstream或fstream类中,都有一个成员函数open,3.使用构造函数打开文件在使用成员函数open打开文件时,需要先定义一个文件流对象4.文件的读/写文件打开后,对文件的读/写操作也有两种方法。第1种方法是使用提取运算符或插入运算符对文件进行读/写操作第2种方法是使用成员函数get、getline、read、put、write进行文件的读/写操作,说明:,(1)若进行文件复制操作,则可在程序中先打开源文件与目标文件,然后用循环语句(2)对于文件结尾的判定还可以使用基类ios中的成员函数eof,其原型如下:intios:eof();当到达文件结束位置时,该函数返回非0值,否则返回0,5.关闭文件打开一个文件且对文件进行读/写操作后,应调用文件流的成员函数来关闭相应的文件,14.4.3顺序文件操作,#include#include/文件操作必须的头文件usingnamespacestd;intmain()fstreamfile1;/定义一个fstream类的对象用于读file1.open(Ex_DataFile.txt,ios:in);if(!file1)coutEx_DataFile.txt不能打开!n;return1;fstreamfile2;/定义一个fstream类的对象用于写file2.open(Ex_DataFileBak.txt,ios:out|ios:trunc);if(!file2)coutEx_DataFileBak.txt不能创建!n;file1.close();return1;,charch;while(!file1.eof()file1.read(程序运行结果如下:,14.4.4随机文件操作,用户可根据具体的读/写操作情况使用C+提供的seek函数将文件指针移动到指定的位置。但在VisualC+中文件指针的定位是通过seekg与seekp成员函数来实现的,seekg函数用于移动输入文件流中的文件指针,seekp函数用于移动输出文件流中的文件指针,它们又可分为绝对定位和相对定位两种操作。1.绝对定位用于文件指针绝对定位的seekg和seekp成员函数原型如下:istream,例Ex_AbsLoc文件指针的绝对定位示例,#include#include/文件操作的头文件usingnamespacestd;intmain()charch,str=ABCDEFGHIJK;ofstreamoutfile(letter.dat);/用构造函数打开文件letter.datif(!outfile)cout不能打开目标文件:letter.dat!endl;exit(1);outfile.write(str,strlen(str);/将字符串str写入letter.dat文件缓冲区outfile.flush();/将缓冲区中字符串写入磁盘文件中ifstreaminfile(letter.dat);/用构造函数打开文件letter.datif(!infile)cout不能打开源文件:letter.dat!endl;exit(1);,infile.seekg(2);/将文件指针移到第2个字节后infile.read(程序运行结果如下:,2.相对定位相对定位是指文件指针相对于某个位置向前移动或向后移动n个字节,它是由seekg和seekp成员函数的另一个版本来实现的,其函数原型如下:istream,例Ex_RelLoc文件指针的相对定位示例。,#include#include/文件操作的头文件usingnamespacestd;intmain()charchs,che,str=ABCDEFGHIJK;fstreamiofile(letter.dat,ios:in|ios:out);/用构造函数打开letter.dat用于读/写if(!iofile)cout不能打开目标文件:letter.dat!endl;exit(1);iofile.write(str,strlen(str);/将字符串str写入letter.dat文件缓冲区iofile.flush();/将缓冲区中字符串写入磁盘文件中iofile.seekg(0,ios:beg);longnStart=iofile.tellg();/获取文件流的最前面位置iofile.seekg(0,ios:end);longnEnd=iofile.tellg();/获取文件流的末尾位置longnPos=0;,while(nStartnEnd)iofile.seekg(nPos,ios:beg);/从头开始向后读取nStart=iofile.tellg();iofile.read(,14.5综合应用实例,#include#include#include#include#includeusingnamespacestd;classCStudent;ostream,classCStudentpublic:CStudent()CStudent(char*name,char*id,floats1,floats2,floats3);voidprint(intn=-1);char*GetName();friendostream,voidCStudent:print(intn)/n为序号,0)cout0)coutsetw(6)n;coutsetw(22)strNamesetw(12)strIDsetw(10)fScore0setw(10)fScore1setw(10)fScore2stu)stu.print(i+1);i+;intmain()CStuFiletheFile(student.dat);CStudentstu1(MaWenTao,99001,88,90,75.5);CStudentstu2(LiMing,99002,92,80,81.5);CStudentstu3(WangFang,99003,89,70,78);CStudentstu4(YangYang,99004,90,80,90);CStudentstu5(DingNing,99005,80,78,85);theFile.add(stu1);theFile.add(stu2);theFile.add(stu3);theFile.add(stu4);theFile.add(stu5);theFile.list();CStudentstu;intnRec=theFile.seek(LiMing,stu);if(nRec=0)cout找到的结果为:endl;stu.print(nRec+1);elsecout没有找到!endl;return0;,程序运行结果如下:,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!