C语言程序设计课件第10章 输入输出流.ppt

上传人:京东小超市 文档编号:5905859 上传时间:2020-08-14 格式:PPT 页数:37 大小:198KB
返回 下载 相关 举报
C语言程序设计课件第10章 输入输出流.ppt_第1页
第1页 / 共37页
C语言程序设计课件第10章 输入输出流.ppt_第2页
第2页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言程序设计课件第10章 输入输出流.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课件第10章 输入输出流.ppt(37页珍藏版)》请在三一文库上搜索。

1、第10章 输入输出流,捍圈悄箩河盾皮汁长沪暗隋揖聘吊铜砖未饭跌洱鹤篱寡酚眉钝氦朋饭写颇C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,课程要求,1深入理解C+的输入输出流的含义与其实现方法。 2掌握标准输入输出流的应用,包括格式输入输出。 3掌握文本文件和二进制文件的读写方法。 4掌握文件的随机存取方法。 5掌握字符串流的应用。,希释洪诊月婴摘缉偿藏浪桌彦丝豺蝶留夏磋荷容快投橙篇风蝶掷布捎弛违C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,主要内容,10.1 C+的输入输出 10.2 标准输入输出流 10.3 文件操作与文件流 10.

2、4 字符串流,棍圈鉴捉宪卒脖融筛嘻四刑账巾典浸恿祈龋窜打盅撞后刷语异抉串凋劝法C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.1 C+的输入输出,C+的输入输出是以流(字节序列)的形式进行的 。 C+的输入输出主要有以下三种: (1)对系统指定的标准设备的输入输出,即标准I/O。 (2)以外存磁盘文件为对象进行的输入输出,称为文件的输入输出。 (3)对内存指定的空间进行输入输出。,积愉褥鬃惮翌澜缅匪但邢掸奏涛愿柄梭羹颊后焙随钟另势水哀红秧王承条C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.1.1 C+流的概念,1流与流类

3、 C+的输入输出流是由若干字节组成的字节序列,这些字节中的数据按一定的顺序从一个对象传送到另一个对象。 C+提供了一些供程序设计者使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。流是用流类定义的对象,如cin、cout 2流的分类 (1)文本流和二进制流 :按照数据的格式 (2)缓冲流与非缓冲流:按是否使用缓冲区,初涤诚累饭吃衅此乎研启召热迪忻涎旗师旷童爪骤走兹袒沙舜匠衷赃诀许C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.1.2 C+流类库,C+的流类库是用继承方法建立起来的输入输出类库,由支持标准输入输出操作的基类和支持特定

4、种类的源和目标的输入输出操作的类组成。它具有两个平行的基类,所有其它的流类都是从它们直接或间接地派生出来的。 streambuf类:提供对流缓冲区的低级操作 ios类:提供对设备、文件的读写操作,轮住挺裁多判瞻撒棱嫌拓崖绿仇爪笑寒蝗听宿腹啊祟红铡罐倒丑蛙偶侄开C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,C+流类体系,姨闺页飞爱嘉骑溯坊渣旬政睬栓虑塔喻荡峭斟徐升召减瞩翅记诲殴吞墨字C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,1通用I/O流类库 (1)基类ios (2)输入类istream (3)输出类ostream (4)输入输

5、出类iostream 2文件I/O流类库 (1)ofstream类 (2)ifstream类 (3)fstream 类 3字符串I/O流类库 (1)ostrstream 类 (2)istrstream 类 (3)strstream类,吕绒烫插颈叮涅蔡措凑肌颂善士屯广啸刨综废衙江汗肛腹句浊凰虱敖襄罪C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.1.3 与iostream类库有关的头文件,(1) iostream.h:包含对输入输出流进行操作的基本信息,提供无格式支持的低级输入输出和有格式支持的高级输入输出操作功能。 (2) fstream.h:包含管理文件输

6、入输出操作的有关信息。 (3) strstrea.h:包含对内存中数据进行输入输出操作的有关信息。 (4) stdiostream.h:包含进行C风格的输入输出操作的有关信息。 (5) iomanip.h:包含输入输出流的格式控制符(manipulator)的有关信息。 当一个程序中需要进行标准流输入输出操作时,则必须包含头文件iostream.h;当需要进行文件流输入输出操作时,则必须包含头文件fstream.h;当需要进行字符串流读/写操作时,则必须包含头文件strstream.h。,炙杆朗滤溶贴试概法赐葱膛围竹婶酞渴缝查疯硝绰塘汐折淬刃问晚肆泌袖C语言程序设计课件第10章 输入输出流C语

7、言程序设计课件第10章 输入输出流,10.1.4 插入与提取运算符的重载,“”本来在C+中被定义为左位移运算符和右位移运算符,由于在文件iostream.h中对它们进行了重载,使得它们能用作标准类型数据的输入输出运算符。从流中获取数据的操作称为提取操作,使用提取运算符“”;向流中添加数据的操作称为插入操作,使用插入运算符“”。,遮贫厩角悦硕柯是伙闸牺皿随卜筹翰称莲险窝讳懈延迸祷厕穗狰瘁袍京涧C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.2 标准输入输出流 10.2.1 标准流类,标准流是不需要打开和关闭文件即可直接操作的流式文件。 cin:类istream

8、的对象,用来处理标准输入,即键盘输入。 cout:类ostream的对象,用来处理标准输出,即屏幕输出。 cerr和clog:类ostream的对象,与错误信息的标准输出设备(屏幕)相关联,前者为非缓冲方式,后者为缓冲方式。,聪叠灾慑橙苔贩悲肃措钨幕滦砖碍冻垮悼骏轮士乒臭腕膳脏籽夹醉湃且铁C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,1标准输入流 cin是由输入类istream的派生类istream_withassign定义的对象,在缺省的情况下,cin所关联的外部设备为键盘,实现从键盘上输入数据。 cin为缓冲流。 2标准输出流 在C+流类体系中定义的标准输出

9、流是cout、cerr、clog,是由输出类ostream的派生类ostream_withassign定义的对象,在缺省的情况下,cout、cerr、clog 所关联的外部设备为屏幕,实现数据流输出到屏幕。 cout、clog为缓冲流,而cerr为非缓冲流。,阂侍充屋敢凳狈钢维论肝革凛接膜赚融罢富削珊绿礼络牲侍博丸硷彼慷当C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.2.2 格式控制成员函数,数据输出的格式控制可通过两种途径实现: 使用预定义格式控制符 带参数(如setw(n))的:在头文件iomanip.h中定义 不带参数(如dec)的:在头文件iost

10、ream.h中定义 使用由ios类定义的格式控制成员函数:在头文件iostream.h中说明,拧讶罐轿接佐辨林坟右坑惭曳鼓嚎牌导涨唉宁杀从稠椭捞浑节晓湛毗利耿C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,1输出宽度和填充字符 输出宽度和填充字符可通过由ios类中定义的输出域宽控制成员函数width(n)和填充成员函数fill(c)实现。其中n为输出数据的宽度,c为填充字符。 【例10.2】 使用成员函数控制输出宽度及填充方式 /*ex10_2.cpp* #include void main() float a=2345.679; cout.fill(*); fo

11、r (int i=0;i5;i+) cout.width(i+6); coutaendl; ,程序运行后输出: 2345.68 2345.68 *2345.68 *2345.68 *2345.68,字墟校努初源酪捆倪诅辩惭镍骡难七摘畔剥文辕淌讨乔晕苗兹侄呕贵起日C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,2其它格式控制 若要改变流的其它输出格式(如对齐方式),可使用ios类中定义的成员函数setf来实现,函数格式如下: cout.setf(格式标志) 格式标志在类ios中被定义为枚举值,在引用这些格式标志时要在前面加上类名ios和域运算符“:”。,挤嚎昨残再音

12、壁续茎希鳖氏稻皱昔楔暖赐脊窿傈雅屁辐录男沧南崎愤掷廷C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,【例10.3】 将学生姓名与比赛得分通过初始化赋给数组name5、score5,指定姓名域宽为10个字符、左对齐,比赛得分为右对齐、用定点方式、小数点后有2位有效数字。 分析:浮点数默认的输出精度为6(即输出6位有效数字),例如浮点数3456.7891 显示为3456.79。若要实现指定小数点后显示几位有效数字,应先用setf设置定点方式,再用成员函数precision(n)设置小数点后n位有效数字。,想倔美瑟入圈缀榨矗和窘胞邵杂碴暴癸汝途镰是庸咨募旬砒澈赏闻柜联憋

13、C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,# include # include void main(void) char *name=Zhou,Zhao,Liu,Chen,Li; double score=89,87.2,78.33,91.444,85.5555; for (int i=0;i5;i+) cout.setf(ios:left); /设置左对齐 cout.width(10);/设置域宽为10 coutnamei; cout.unsetf(ios:left); cout.setf(ios:fixed); /设置定点方式 cout.precisi

14、on(2); /设置小数点后2位有效数字 coutscorein; ,程序运行后,输出如下: Zhou 89.00 Zhao 87.20 Liu 78.33 Chen 91.44 Li 85.56,窝旬水检乾宣黎妆蹿琐公胞番袄匙酥喀盟赡肉焰禁箩病捆晤垃绒尿终迭獭C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.2.3 数据输入输出成员函数,1数据输入成员函数 (1)字符输入成员函数 成员函数get()可以从输入流中获取字符,并将它存放在指定的变量中。该函数有以下两种格式: ch=cin.get() cin.get(ch) 函数实现从输入流中读取一个字符,赋给字

15、符变量ch。采用第2种格式时,如果读取数据成功则函数返回非0值(真),否则(遇结束标志符)返回0值(假)。,练锹阂佩褒承违眯病闸羊陡吗臻捆岂傲哦淬腕膜腥豹油舅铆便墩部陨顷贱C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,【例10.4】 读取字符 /*ex10_4.cpp* #include void main(void) char c1,c2,c3; cout输入字符:; c1=cin.get(); cin.get(c2); cin.get();/读入空白字符 cin.get(c3); coutc1=c1endl; coutc2=c2endl; coutc3=c3

16、endl; ,输入字符:ab c c1=a c2=b c3=c,炼萌暮柯亥碾辨嘎滞利粕芯饵堕辖诲万组韧知箔隐纺睦凑毛苛傀辣褂篡汽C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,(2)字符串输入成员函数 从输入流中一次读取一串字符,有以下2种方式: cin.get(字符数组或字符指针,字符个数n,终止字符) cin.getline(字符数组或字符指针,字符个数n,终止字符) 从输入流中读取n1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),否则(遇文件结束符)返回0值

17、(假)。第三个参数缺省为换行符。,侮脖推臀慕匀祈措骂史巡脚摸可溉浊泅骨剂卿玄迁聋临菜郴志抵玲绥谆憨C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,【例10.5】 读取字符串 /*ex10_5.cpp* #include void main(void) char str120,str220; cout输入一行字符串:; cin.getline(str1,20); cin.get(str2,20); coutstr1=str1endl; coutstr2=str2endl; ,程序运行结果如下: 输入2行字符串:This is a book. This is a bo

18、ok. str1=This is a book. str2=This is a book.,继艳柒毛锅李呛昭齐鹃解鹿相踪曙萄托吸搓泵作堡咏庄桶反瘴哇自吁甜缕C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,2数据输出成员函数 (1)字符输出成员函数 函数put()用于输出单个字符,格式如下: cout.put(char c); put函数的参数c可以是字符或字符的ASCII码,例如: cout.put(a); /在屏幕上显示字符a (2)字符串输出成员函数 函数write()用于输出一个指定长度的字符串,格式如下: cout.write(字符串,字符个数n) ; 例

19、如: cout.write(This is a book. n,20);,个厂狞狸巍夏噬就祟游梢枪苇钟原森妮玄个设吻流四种钙铬贮吾碱寄膀榆C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.3 文件操作与文件流,10.3.1 文件的概念 1文件 文件(File)指存储于外部介质上的信息集合,分为文本文件和二进制文件。 文本文件以字节(byte)为单位,每字节为一ASCII 码,代表一个字符,故又称字符文件;二进制文件又称为内部文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。例如整数1025,以文本形式(31003236H)存储占用四个

20、字节,以二进制形式(0401H)存储则只占用两个字节。,具摇饶洪翻谭赤婆肚叫枣对迎逝裙熙彭牛柠诸邓填剐容瑚肛拍疼镁赐舔而C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,2文件的操作 文件操作分成4步: (1)定义文件流对象 ifstream 文件输入流对象; ofstream 文件输出流对象; fstream 文件输入/出流对象; (2)打开文件 文件流对象.open(磁盘文件名,输入输出模式) 也可以在定义文件流对象时指定文件打开模式,在构造过程中打开该文件。定义方式如下: ifstream 文件流对象(磁盘文件名,输入输出模式); ofstream 文件流对象

21、(磁盘文件名,输入输出模式); fstream 文件流对象(磁盘文件名,输入输出模式);,卷毯从哟滦咎绷慌牛滇北警橱懦彝椿魂律侠匿薄担案钱颁锗臀映琳烦纵烬C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,(3)读/写文件 (4)关闭文件 文件流对象.close( );,咖贩域浅娜嗓绷叼狡董攀旗怨椎犊堂石戍擦函电毒扬丢晾屹拇馒哪桔用辈C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.3.2 文本文件的读写,1使用提取运算符或插入运算符对文件进行读写操作。 【例10.6】 使用提取运算符和插入运算符将源文件中的前100个字符复制到目标文

22、件中。 # include void main(void) char fname120,fname220; coutfname1; coutfname2; ifstream infile(fname1); /定义文件输入流对象,打开源文件 if (!infile) cout不能打开输入文件:fname1endl; return; ,嘶矿瞬吸耽瓣环支大蓄卢宜啼棱败鸿听戎禄婪启孪粪驶拦泞拼妥柳符唯盅C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,ofstream outfile(fname2); /定义文件输出流对象,打开目标文件 if (!outfile) cout

23、ch; /从源文件中提取一个字符到变量ch中; outfilech; /将ch中的字符写入目标文件中。 i=i+1; infile.close(); /关闭源文件 outfile.close(); /关闭目标文件 ,胃布绕软轮赫事海伯荤锤感氦狄此挛怔往嚷盛抒掐毡鸳水盂系佬舱弊酣獭C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,2使用成员函数进行文件的读写操作 【例10.7】 使用成员函数get与put将源文件的内容复制到目标文件中 分析:先打开源文件和目标文件,依次从源文件中读取一个字符,并将所读字符写入目标文件中,直到源文件中所有字符读完为止。 # includ

24、e void main(void) char fname120,fname220; coutfname1; coutfname2; ifstream infile; / 定义文件输入流对象 infile.open(fname1, ios:in | ios:nocreate);/打开源文件 if (!infile) cout源文件不存在!fname1endl; return; ,畴摄冉楞煤称舜迁川寅岂虽欧应姬沃籽原糯撩统狄储叙做虏硅路傣杜烂咳C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,ofstream outfile; / 定义文件输出流对象 outfile.o

25、pen(fname2,ios:out | ios:noreplace);/打开目标文件 if (!outfile) cout目标文件已存在,不能新建目标文件!fname2endl; return; char ch; while (infile.get(ch) /从源文件中提取一个字符到变量ch中; outfile.put(ch); /将ch中的字符写入目标文件中。 infile.close(); outfile.close(); ,囊喇际碰晌孤童纫力陈茸蕉尺避宝致秀白绒庞猎喷农您驾致唬续繁草栗易C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.3.3 二进制文

26、件的读写,1二进制文件的写操作 二进制文件的写操作是通过成员函数write()来实现: write(字符数组或字符指针, 字节数); 2二进制文件的读操作 二进制文件的读操作是通过成员函数read()来实现: read(字符数组或字符指针, 字节数 );,膨脾耽蚤挠乍弊恕定记迟碴冤可若狄庶高畔屑滩谚虫在氓美翘明虚处晌钝C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,3测试文件结束 测试二进制文件结束位置可用成员函数eof()实现,当到达文件结束位置时,该函数返回零值,否则返回非零值。 4返回读入数据的长度 返回最近一次输入所读入的字节数可用成员函数gcount()

27、实现。,榔喀荆逻海缩尉税烽终离沾媒议剧识钡解金核秋苍献断锄因刨冠虏痞夺谎C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.3.4 文件的随机读写,从文件中任何位置开始进行读或写数据,这种读写方式称为文件的随机访问或直接存取。 1文件定位 C+ 的类库fstream中定义了两个与文件相联系的指针 读指针 写指针 C+的文件定位分为读位置和写位置的定位,对应的成员函数 seekg():设置读位置 Seekp:设置写位置,克以铸辛男种推刘的巳与躺租汞撼货旁犊腾奴狄剑赊缨梧躁绑勺褪频瓦部C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,(1

28、)读操作定位 相对文件头指针移动n个字节 seekg(位移量n); 相对参照位置指针移动n个字节 seekg(位移量n, 参照位置 ); 参照位置可取三个值: io3:beg或0:文件头。 io3:cur或1:文件指针当前的位置。 io3:end或2:文件尾。 (2)写操作定位 文件写操作的定位是通过成员函数seekp实现的。 seekp(位移量n); seekp(位移量n, 参照位置 );,抚辈釜费阎涣拎侠冶抠盒舆载枪步咎拢兄舍堰们帐羌掸识咀煌层睹卉镍掠C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,2其它成员函数 (1)tellg() 用于返回输入文件中文件指

29、针的当前位置,返回值为streampos类型。 (2)tellp() 用于返回输出文件中文件指针的当前位置,返回值为streampos类型。 (3)ignore(字符数n,终止字符) 用于略过n个字符。,疙尤叶瘫藉打扑驰滦蕊贞俘知抗康翟掌搁夸干谋涸静典贿贰架鞘肾凌咽汐C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.4 字符串流,字符串流则是以内存中用户自定义的字符数组(字符串)为输入输出的对象,因此字符串流又称为内存流。 10.4.1 字符串流的概念 字符串流对象关联的不是文件,而是内存中的一个字符数组,因此不需打开和关闭流对象。 字符串流类包括istrst

30、ream、ostrstream和strstream。,侵员菇稿槐奸泡呻粥租碑咕嘘迪菏千凯蛛狐谬潦坍碱札晦携楼呈劫舅跺埋C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.4.2 字符串流的输出操作,1字符串输出流的定义 定义字符串输出流,即建立存储所插入数据的数组对象的语句格式为: ostrstream 字符串流对象(字符数组,缓冲区大小n,操作模式); strstream 字符串流对象(字符数组,缓冲区大小n,操作模式); 2字符串输出流的操作 (1)pcount() 返回当前字符数组中已经插入的字符个数; (2)str() 返回存储在字符数组中的字符串。,欠

31、九署凝服回哩褒爷岗伤嚷灿吝牵唁嘴僻卵际殿滞蜗肮扰渠酿弓散江框勘C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,10.4.3 字符串流的输入操作,1字符串输入流的定义 定义字符串输入流,即初始化所创建的字符串输入流对象的语句格式为: istrstream 字符串流对象(字符数组,缓冲区大小n); strstream 字符串流对象(字符数组,缓冲区大小n,ios:in); 2字符串输入流的操作 一个字符串输入流被定义后,可以调用相应的成员函数进行数据的输入操作。,吨茸涅怕殃庙铆侵挪泊骂腑缮辽烦焙陵怀由瓦业舵救尚灵却斜塘咎蜘莫份C语言程序设计课件第10章 输入输出流C语言程序设计课件第10章 输入输出流,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1