《C程序设计》电子教案第10章流类库与输入输出.ppt
《《C程序设计》电子教案第10章流类库与输入输出.ppt》由会员分享,可在线阅读,更多相关《《C程序设计》电子教案第10章流类库与输入输出.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 流类库与输入输出流类库与输入输出n10.1 I/O标准流类标准流类n10.2 格式化格式化I/On10.3 文件流文件流n10.4 字符串流字符串流10.1 I/O标准流类标准流类n10.1.1 预定义流预定义流n10.1.2 C+中的流类库中的流类库返回首页n在在C+语语言言中中,数数据据的的输输入入和和输输出出(简简写写为为I/O)包包括括对对标标准准输输入入设设备备键键盘盘和和标标准准输输出出设设备备显显示示器器、对对在在外外存存磁磁盘盘上上的的文文件件和和对对内内存存中中指指定定的的字字符符串串存存储储空空间间进进行行输输入入输输出出这这三三个个方方面面。对对标标准准输输
2、入入设设备备和和标标准准输输出出设设备备的的输输入入输输出出简简称称为为标标准准I/O,对对在在外外存存磁磁盘盘上上文文件件的的输输入入输输出出简简称称为为文文件件I/O,对对内内存存中中指指定定的的字字符符串串存存储储空空间的输入输出简称为串间的输入输出简称为串I/O。nC+中把数据之间的传输操作称作流。在中把数据之间的传输操作称作流。在C+中,流既可以表示数据从内存传送到某个载体中,流既可以表示数据从内存传送到某个载体或设备中,即输出流;也可以表示数据从某个或设备中,即输出流;也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入载体或设备传送到内存缓冲区变量中,即输入流。在进行流。
3、在进行I/O操作时,首先打开操作,使流和操作时,首先打开操作,使流和文件发生联系,建立联系后的文件才允许数据文件发生联系,建立联系后的文件才允许数据流入或流出,输入或输出结束后,使用关闭操流入或流出,输入或输出结束后,使用关闭操作使文件与流断开联系。作使文件与流断开联系。nC+中中所所有有流流都都是是相相同同的的,但但文文件件可可以以不不同同。使使用用流流以以后后,程程序序用用流流统统一一对对各各种种计计算算机机设设备备和和文文件件进进行行操操作作,使使程程序序与与设设备备、程程序序与与文文件件无无关关,从从而而提提高高了了程程序序设设计计的的通通用用性性和和灵灵活活性性。也也就就是是说说,无
4、无论论与与流流相相联联系系的的实实际际物物理理设设备备差差别别有有多多大大,流流都都采采用用相相同同的的方方式式运运行行。这这种种机机制制使使得得流流可可以以跨跨越越物物理理设设备备平平台台,实实现现流流的的透透明明运运作作,而而与与实实际际的的物物理理设设备备无无关关。例例如如,往往显显示示器器上上输输出出字字符符和和向向磁磁盘盘文文件件或或打打印印机机输输出出字字符符,尽尽管管接接受受输输出出的的物物理理设设备备不不同同,但但具具体体操作过程是相同的。操作过程是相同的。10.1.1 预定义流预定义流n1cout在在ostream输输出出流流类类中中定定义义有有对对左左移移操操作作符符重重载
5、载的的一一组组公用成员函数,函数的具体声明格式为:公用成员函数,函数的具体声明格式为:ostream&operator重重载载的的一一组组公用成员函数,函数的具体声明格式为:公用成员函数,函数的具体声明格式为:istream&operator(简单类型标识符简单类型标识符&);n3cerrcerr类似标准错误文件。类似标准错误文件。cerr与与cout的差别在于:的差别在于:(1)cerr不能重定向。不能重定向。(2)cerr不不能能被被缓缓冲冲,它它的的输输出出总总是是直直接接传传达达到到标标准准输输出设备上。出设备上。4clogclog是是不不能能重重定定向向的的,但但是是可可以以被被缓缓
6、冲冲。在在某某些些系系统统中中,由于缓冲,使用由于缓冲,使用clog代替代替cerr可以改进显示速度。可以改进显示速度。clog Error n;返回本节10.1.2 C+中的流类库中的流类库nC+语语言言系系统统为为实实现现数数据据的的输输入入和和输输出出定定义义了了一一个个庞庞大大的的类类库库,它它 包包 括括 的的 类类 主主 要要 有有 ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream和和strstream等。等。n其其中中ios为为根根基基类类,它它直直接接派派生生四四个个类类:输
7、输入入流流类类istream、输输出出流流 类类 ostream、文文 件件 流流 基基 类类 fstreambase和和 字字 符符 串串 流流 基基 类类strstreambase,输输入入文文件件流流类类ifstream同同时时继继承承了了输输入入流流类类和和文文件件流流基基类类(当当然然对对于于根根基基类类是是间间接接继继承承),输输出出文文件件流流类类ofstream同同时时继继承承了了输输出出流流类类和和文文件件流流基基类类,输输入入字字符符串串流流类类istrstream同同时时继继承承了了输输入入流流类类和和字字符符串串流流基基类类,输输出出字字符符串串流流类类ostrstre
8、am同同时时继继承承了了输输出出流流类类和和字字符符串串流流基基类类,输输入入输输出出流流类类iostream同同时时继继承承了了输输入入流流类类和和输输出出流流类类,输输入入输输出出文文件件流流类类fstream同同时时继继承承了了输输入入输输出出流流类类和和文文件件流流基基类类,输输入入输输出出字字符符串串流类流类strstream同时继承了输入输出流类和字符串流基类。同时继承了输入输出流类和字符串流基类。返回本节10.2 格式化格式化I/On10.2.1 ios类中的枚举常量类中的枚举常量n10.2.2 使用使用ios成员函数成员函数n10.2.3 使用使用I/O操作符操作符n10.2.
9、4 检测流操作的错误检测流操作的错误返回首页10.2.1 ios类中的枚举常量类中的枚举常量n在根基类在根基类ios中定义有三个用户需要使用的枚举类型,由中定义有三个用户需要使用的枚举类型,由于它们是在公用成员部分定义的,所以其中的每个枚举类于它们是在公用成员部分定义的,所以其中的每个枚举类型常量在加上型常量在加上ios:前缀后都可以为本类成员函数和所有外前缀后都可以为本类成员函数和所有外部函数访问。部函数访问。n在三个枚举类型中有一个无名枚举类型,其中定义的每个在三个枚举类型中有一个无名枚举类型,其中定义的每个枚举常量都是用于设置控制输入输出格式的标志使用的。枚举常量都是用于设置控制输入输出
10、格式的标志使用的。该枚举类型定义如下:该枚举类型定义如下:enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio;n各枚举常量的含义如下:各枚举常量的含义如下:n(1)skipws。n(2)left,right,internal。n(3)dec,oct,hex。n(4)showbase。n(5)showpoint。n(6)uppercase。n(7)showpos。n(8)scientific,fixed。n(9)unitbuf
11、,stdio。返回本节10.2.2 使用使用ios成员函数成员函数nios类类提提供供成成员员函函数数对对流流的的状状态态进进行行检检测测和和进进行行输输入入输输出出格格式式控控制制等等操操作,每个成员函数的声明格式和简要说明如下:作,每个成员函数的声明格式和简要说明如下:int bad();/操作出错时返回非操作出错时返回非0值值int eof();/读取到流中最后的文件结束符时返回非读取到流中最后的文件结束符时返回非0值值int fail();/操作失败时返回非操作失败时返回非0值值void clear();/清清除除bad,eof和和fail所所对对应应的的标标志志状状态态,使使之恢复为
12、正常状态之恢复为正常状态 /值值0,使,使good标志状态恢复为标志状态恢复为1char fill();/返回当前使用的填充字符返回当前使用的填充字符char fill(char c);/重重新新设设置置流流中中用用于于输输出出数数据据的的填填充充字字符为符为c的值,返回的值,返回 /此前的填充字符。系统预设置填充字符为空格此前的填充字符。系统预设置填充字符为空格long flags();/返回当前用于返回当前用于I/O控制的格式状态字控制的格式状态字long flags(long f);/重新设置格式状态字为重新设置格式状态字为f的值,返回此前的格式状态字的值,返回此前的格式状态字int g
13、ood();/操作正常时返回非操作正常时返回非0值,当操作出错、失败和读到文件值,当操作出错、失败和读到文件 /结束符时均为不正常,则返回结束符时均为不正常,则返回0int precision();/返回浮点数输出精度,即输出的有效数字的位数返回浮点数输出精度,即输出的有效数字的位数int precision(int n);/设置浮点数的输出精度为设置浮点数的输出精度为n,返回此前的输出精度。系统预设返回此前的输出精度。系统预设 /置的输出精度为置的输出精度为6,即输出的浮点数最多具有,即输出的浮点数最多具有6位为有效数字位为有效数字int rdstate();/操作正常时返回操作正常时返回0
14、,否则返回非,否则返回非0值,它与值,它与good()正好相反正好相反long setf(long f);/根据参数根据参数f设置相应的格式化标志,返回此前的设置。该参数设置相应的格式化标志,返回此前的设置。该参数/f所对应的实参为无名枚举类型中的枚举常量(又称格式化常所对应的实参为无名枚举类型中的枚举常量(又称格式化常/量),可以同时使用一个或多个常量,每两个常量之间要用按位或量),可以同时使用一个或多个常量,每两个常量之间要用按位或/操作符连接。如需要左对齐输出,并使数值中的字母大写时,操作符连接。如需要左对齐输出,并使数值中的字母大写时,/则调用该函数的实参为则调用该函数的实参为ios:
15、left|ios:uppercaselong unsetf(long f);/根根据据参参数数f清清除除相相应应的的格格式式化化标标志志,返回此前的设置。如要,返回此前的设置。如要/清除此前的左对齐输出设置,恢复默认的右对齐输出设置,清除此前的左对齐输出设置,恢复默认的右对齐输出设置,/则调用该函数的实参为则调用该函数的实参为ios:leftint width();/返返回回当当前前的的输输出出域域宽宽。若若返返回回数数值值0则则表表明没为刚才输出的数明没为刚才输出的数/值值设设置置输输出出域域宽宽。输输出出域域宽宽是是指指输输出出的的值值在在流流中中所所占占有有的的字字节节数数int wid
16、th(int w);/设设置置下下一一个个数数据据值值的的输输出出域域宽宽为为w,返回为输出上一个数据值返回为输出上一个数据值/所规定的域宽,若无规定则返回所规定的域宽,若无规定则返回0。注意:此设置不是一直有。注意:此设置不是一直有/效,而只是对下一个输出数据有效效,而只是对下一个输出数据有效n例例10-2:给出以下程序的运行结果。给出以下程序的运行结果。#includevoid main()int x=123;double y=-3.456789;coutx=;cout.width(10);/设设置置输输出出下下一一个个数数据据的的域域宽宽为为10 coutx;/按按默默认认的的右右对对齐
17、齐输输出出,剩剩余余位置填充空格字符位置填充空格字符 couty=;cout.width(10);/设设置置输输出出下下一一个个数数据据的的域域宽宽为为10 coutyendl;cout.setf(ios:left);/设置按左对齐输出设置按左对齐输出 coutx=;cout.width(10);coutx;couty=;cout.width(10);coutyendl;cout.fill(*);/设置填充字符为设置填充字符为*cout.precision(3);/设置浮点数输出精度为设置浮点数输出精度为3 cout.setf(ios:showpos);/设置正数的正号输出设置正数的正号输出
18、coutx=;cout.width(10);coutx;couty=;cout.width(10);coutyendl;此程序运行结果如下:此程序运行结果如下:x=123y=-3.45679x=123 y=-3.45679x=+123*y=-3.46*n例例10-3:给出以下程序的运行结果。给出以下程序的运行结果。#includevoid main()float x=12,y=-3.456;coutx yendl;cout.setf(ios:showpoint);/强制显示小数点和无效强制显示小数点和无效0 coutx yendl;cout.unsetf(ios:showpoint);/恢复默
19、认输出恢复默认输出 cout.setf(ios:scientific);/设置按科学表示法输出设置按科学表示法输出 coutx yendl;cout.setf(ios:fixed);/设置按定点表示法输出设置按定点表示法输出 coutx yendl;程序运行结果如下:程序运行结果如下:12-3.45612.0000-3.456001.200000e+001-3.456000e+00012-3.456返回本节10.2.3 使用使用I/O操作符操作符n数据输入输出的格式控制还有更简便的形式,数据输入输出的格式控制还有更简便的形式,就是使用系统头文件就是使用系统头文件iomanip.h中提供的操作中
20、提供的操作符。使用这些操纵符不需要调用成员函数,只符。使用这些操纵符不需要调用成员函数,只要把它们作为插入操作符要把它们作为插入操作符)的输出对象即可。)的输出对象即可。n例例10-4:给出以下程序的运行结果。给出以下程序的运行结果。#include /因因iomanip.h中中包包含含有有iostream.h,所所以以该该命命令令可省略可省略#includevoid main()int x=12,y=345,z=6789;coutx y zendl;/按十进制输出按十进制输出 coutoctx y zendl;/按八进制输出按八进制输出 couthexx y zendl;/按十六进制输出按十
21、六进制输出 coutsetiosflags(ios:showbase|ios:uppercase);/设置基指示符和数值中的字母大写输出设置基指示符和数值中的字母大写输出 coutx y zendl;/仍按十六进制输出仍按十六进制输出 coutresetiosflags(ios:showbase|ios:uppercase);/取消基指示符和数值中的字母大写输出取消基指示符和数值中的字母大写输出 coutx y zendl;/仍按十六进制输出仍按十六进制输出 coutdecx y zendl;/按十进制输出按十进制输出n例例10-5:给出以下程序的运行结果。给出以下程序的运行结果。#inclu
22、de#includevoid main()int x=123;double y=-3.456789;coutx=setw(10)x;couty=setw(10)yendl;coutsetiosflags(ios:left);/设置按左对齐输出设置按左对齐输出 coutx=setw(10)x;couty=setw(10)yendl;coutsetfill(*);/设置填充字符为设置填充字符为*coutsetprecision(3);/设置浮点数输出精度为设置浮点数输出精度为3 coutsetiosflags(ios:showpos);/设置正数的正号输出设置正数的正号输出 coutx=setw(
23、10)x;couty=setw(10)yendl;coutresetiosflags(ios:left|ios:showpos);coutsetfill();返回本节10.2.4 检测流操作的错误检测流操作的错误在在I/O流流的的操操作作过过程程中中可可能能出出现现各各种种错错误误,每每一一个个流流都都有有一一个个状状态态标标志志字字,以以指指示示是是否否发发生生了了错错误误以以及及出出现现了了哪哪种种类类型型的的错错误误,这这种种处处理理技技术术与与格格式式控控制制标标志志字字是是相相同的。同的。ios类定义了以下枚举类型:类定义了以下枚举类型:enum io_state goodbit=0
24、 x00,/不设置任何位,一切正常不设置任何位,一切正常 eofbit =0 x01,/输入流已经结束,无字符可读入输入流已经结束,无字符可读入 failbit =0 x02,/上次读上次读/写操作失败,但流仍可使用写操作失败,但流仍可使用 badbit =0 x04,/试图作无效的读试图作无效的读/写操作,流不再可用写操作,流不再可用 hardfail=0 x80 /不可恢复的严重错误不可恢复的严重错误;返回本节10.3 文件流文件流n10.3.1 文件的概念文件的概念n10.3.2 文件的打开与关闭文件的打开与关闭n10.3.3 文件的读写文件的读写返回首页10.3.1 文件的概念文件的概
25、念n在磁盘上保存的信息是按文件的形式组织的,在磁盘上保存的信息是按文件的形式组织的,每个文件都对应一个文件名,并且属于某个物每个文件都对应一个文件名,并且属于某个物理盘或逻辑盘的目录层次结构中一个确定的目理盘或逻辑盘的目录层次结构中一个确定的目录之下。一个文件名由文件主名和扩展名两部录之下。一个文件名由文件主名和扩展名两部分组成,它们之间用圆点(即小数点)分开,分组成,它们之间用圆点(即小数点)分开,扩展名可以省略,当省略时也要省略掉前面的扩展名可以省略,当省略时也要省略掉前面的圆点。文件主名是由用户命名的一个有效的圆点。文件主名是由用户命名的一个有效的C+标识符,为了同其他软件系统兼容,一般
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 程序设计 电子 教案 10 章流类库 输入输出
限制150内