版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大学大学C+程序设计教程程序设计教程西安交通大学西安交通大学计算机教学实验中心计算机教学实验中心第第13章章 规范库和输入输出流规范库和输入输出流u教学目的教学目的u1. C+规范库规范库 u2. 掌握文件的翻开和封锁、读和写的掌握文件的翻开和封锁、读和写的操作方法;操作方法;u3. 掌握文本文件和二进制文件;掌握文本文件和二进制文件;u4. 格式化格式化I/O系统。系统。授授 课课 内内 容容 u13.1 规范库概述规范库概述 u13.2 流概述流概述u13.3 输入输出流输入输出流u13.4 格式化格式化I/Ou13.5 文件处置文件处置u13.6 对象的输入对象
2、的输入/输出输出u13.7 规范模板库规范模板库STL简介简介13.1 规范库概述规范库概述u用用C+言语编写的类和函数库言语编写的类和函数库 u由编译器厂商提供,与平台、厂商和由编译器厂商提供,与平台、厂商和编译器版本无关编译器版本无关规范库构成规范库构成u规范函数库规范函数库u从从C言语中承继下来言语中承继下来uC格式的输入输出函数、字符与字符格式的输入输出函数、字符与字符串处置函数、数学函数、时间日期函串处置函数、数学函数、时间日期函数、动态分配函数以及一些适用函数数、动态分配函数以及一些适用函数 u规范类库规范类库u规范规范C+的的I/O流类、字符串类、数字流类、字符串类、数字类、异常
3、处置和杂项类以及类、异常处置和杂项类以及STL容器容器类类 规范库的运用规范库的运用u包含相应的头文件包含相应的头文件uC+的头文件来源:的头文件来源:u规范规范C言语库函数的头文件,带有言语库函数的头文件,带有.h后后缀;缀;u规范规范C+言语类库的头文件,不带言语类库的头文件,不带.h后缀;后缀;u由规范由规范C言语库函数头文件变成的规言语库函数头文件变成的规范范C+的头文件,把原有规范的头文件,把原有规范C言语库言语库函数头文件去掉函数头文件去掉.h后缀而加上后缀而加上c前缀。前缀。 10.4 命名空间命名空间命名空间命名空间namespace,又称名字空间是,又称名字空间是C +的声明
4、区域,根本意义在于防止程序中的标识符的声明区域,根本意义在于防止程序中的标识符重名,这是构造化程序的根本目的之一。重名,这是构造化程序的根本目的之一。C +引入的类声明,实践上可以将全局变量括起引入的类声明,实践上可以将全局变量括起来,使这些全局变量部分于该类中。来,使这些全局变量部分于该类中。C +新的规新的规范将这一方式推行了,不再需求借助一个能产生范将这一方式推行了,不再需求借助一个能产生对象的类,就可经过纯粹起变量命名划分作用的对象的类,就可经过纯粹起变量命名划分作用的命名空间来做到这一点。命名空间来做到这一点。命名空间的声明与类的声明非常类似,同样,指命名空间的声明与类的声明非常类似
5、,同样,指定其中的变量或函数需以命名空间的名字作为域定其中的变量或函数需以命名空间的名字作为域作用限定符。例如:作用限定符。例如: unamespace spaceAu int m,n;u void fun1()m+=5;u void fun2()fun1();u /没有没有“;号号u void main()u spaceA m=12;u spaceA fun1();uu可以看出,在命名空间外面对命名空间中可以看出,在命名空间外面对命名空间中的变量与函数访问时,需加上命名空间作的变量与函数访问时,需加上命名空间作用域限定符。命名空间终了处不应该加分用域限定符。命名空间终了处不应该加分号,一个命
6、名空间可以分散在多个文件中。号,一个命名空间可以分散在多个文件中。u在命名空间援用到命名空间的变量时,都在命名空间援用到命名空间的变量时,都要加上命名空间前缀,为理处理这件令人要加上命名空间前缀,为理处理这件令人感到费事的事,感到费事的事,C +引入如下语句:引入如下语句: u using namespace 命名空间名;命名空间名;u现实上,目前现实上,目前C +规范中的规范类规范中的规范类库的变量与函数都属于命名空间库的变量与函数都属于命名空间std,如如cout、cin等,由于相应的头文件中等,由于相应的头文件中都有语句都有语句“using namespace std;,对,对上述变量的
7、援用无需再写成:上述变量的援用无需再写成: std cout和和std cin。u新的新的C +规范引入了一种新的头文规范引入了一种新的头文件载入方式:件载入方式: 没有没有.h。 C +规范类库的头文件称号规范类库的头文件称号13.2 流流在在C+中,输入输出是经过流来完成的。中,输入输出是经过流来完成的。C+的的输出操作将一个对象的形状转换成一个字符序输出操作将一个对象的形状转换成一个字符序列,输出到某个地方。输入操作也是从某个地列,输出到某个地方。输入操作也是从某个地方接纳到一个字符序列,然后将其转换成一个方接纳到一个字符序列,然后将其转换成一个对象的形状所要求的格式。对象的形状所要求的
8、格式。这看起来很像数据在流动,于是把接纳输出数这看起来很像数据在流动,于是把接纳输出数据的地方叫做目的,把输入数据来自的地方叫据的地方叫做目的,把输入数据来自的地方叫做源。而输入和输出操作可以看成字符序列在做源。而输入和输出操作可以看成字符序列在源、目的以及对象之间的流动。源、目的以及对象之间的流动。C+将与输入和输出有关的操作定义为一个类体将与输入和输出有关的操作定义为一个类体系,放在一个系统库里,以备用户调用。这个系,放在一个系统库里,以备用户调用。这个执行输入和输出操作的类体系就叫做流类,提执行输入和输出操作的类体系就叫做流类,提供这个流类实现的系统库就叫做流类库供这个流类实现的系统库就
9、叫做流类库输入输入/ /输出流类的承继层次构造输出流类的承继层次构造 iostream流类库的层次构造流类库的层次构造输入输出流输入输出流u头文件头文件iostream中含有中含有4个对象:个对象:ucin:规范输入流:规范输入流ucout :规范输出流:规范输出流ucerr :非缓冲规范错误流:非缓冲规范错误流uclog :经缓冲规范错误流:经缓冲规范错误流u格式化格式化I/O :包含头文件:包含头文件iomanipu文件处置操作文件处置操作 :包含头文件:包含头文件fstream输入输出流的成员函数输入输出流的成员函数u屏幕输出写操作屏幕输出写操作u1. 运用预定义的插入符运用预定义的插入
10、符。u2. 运用成员函数运用成员函数get( )读一个字符。读一个字符。u3. 运用成员函数运用成员函数getline( )读一行字符。读一行字符。u4. 运用成员函数运用成员函数read( )读假设干个字读假设干个字符。符。输入输出流的成员函数输入输出流的成员函数 uget():可读取输入的空格;:可读取输入的空格;ugetline():读取一行信息到字符数组中;:读取一行信息到字符数组中;uput():输出一个字符;:输出一个字符;uignore():跳过制定数量的字符;:跳过制定数量的字符;uputback() upeek() :前往输入流中的下一个字符,但不:前往输入流中的下一个字符,
11、但不将其从输入流中删除;将其从输入流中删除;uread()/write():无格式输入、输出;:无格式输入、输出;ugcount():统计输入个数;:统计输入个数;13.4 格式化格式化I/Ou1. 运用形状标志和成员函数进展格式运用形状标志和成员函数进展格式化输出化输出u1 控制格式的标志位。控制格式的标志位。u定义标志位的组合静态变量:定义标志位的组合静态变量:ubasefielddel|oct|hexuadjustfield left|right|internalufloatfieldseientific|fixedu2 设置标志字的成员函数设置标志字的成员函数ulong flags(
12、):前往流格式标志的当前设置;:前往流格式标志的当前设置;u例:例:cout.flags(ios:scientific|ios:showpos);ulong setf():设置流格式标志:设置流格式标志u例:例:cout.setf(ios:uppercase|ios:scientific);ulong unsetf(long):去除流格式标志去除流格式标志(3) 控制输出格式和成员函数控制输出格式和成员函数int width( ) 设置域宽;设置域宽;int fill( ) 填充字符;填充字符;int precision( ) 设置精度;设置精度;#include using namespac
13、e std;int main()cout.precision (4);cout.width(10);cout10.12345endl;cout.fill (*);cout.width (10);cout10.12345endl;coutHiendl;cout.width (10);cout.setf(ios:left);cout10.12345endl;return 0;u2. 运用流操作符进展格式输出运用流操作符进展格式输出u系统系统I/O流类库中所定义的操作符被放在流类库中所定义的操作符被放在iomanip.h文件中。文件中。u常量名常量名 含含 义义 uskipws 跳过输入中的空白跳过
14、输入中的空白 uleft 输出数据按输出域左边对齐输出输出数据按输出域左边对齐输出uright 输出数据按输出域右边对齐输出输出数据按输出域右边对齐输出uinternal 在指定任何引导标志或基之后填充字符在指定任何引导标志或基之后填充字符udec 转换基数为十进制方式转换基数为十进制方式uoct 转换基数为八进制方式转换基数为八进制方式 uhex 转换基数为十六进制方式转换基数为十六进制方式ushowbase 输出带有一个表示制式的字符输出带有一个表示制式的字符ushowpoint 浮点输出时必需带有一个小数点和尾浮点输出时必需带有一个小数点和尾部的部的0u常量名常量名 含含 义义 uupp
15、ercase 十六进制数值输出运用大十六进制数值输出运用大写写AF,科学计数,科学计数u 显示运用大写字母显示运用大写字母Eushowpos 在正数前添加一个在正数前添加一个“+号号 ufixed 运用定点方式表示浮点数运用定点方式表示浮点数 uscientific 运用科学计数法表示浮点运用科学计数法表示浮点数数 uuntibuf 每次插入之后每次插入之后, ostream osfx刷新该刷新该u 流的缓冲区。默许缓冲单流的缓冲区。默许缓冲单元为元为cerrusetbase(base) 将基数设置为将基数设置为base例例13-2 13-2 设置整数流的基数设置整数流的基数 u#includ
16、e u#include uusing namespace std;uint main()uint n;ucout n;ucout n in hexadecimal is: u hex n nu dec n in octal is: u oct n nu setbase( 10 ) n in decimal is: u n endl;ureturn 0;u文件处置文件处置 u根本概念根本概念 u翻开和封锁文件翻开和封锁文件u读读 u写写 u文件指针文件指针 u缓冲区缓冲区 文件文件I/O流库类层次构造流库类层次构造u1. 磁盘文件翻开封锁操作磁盘文件翻开封锁操作u1 翻开文件的两种方法翻开文件的
17、两种方法u方法一:方法一:ufstream 流对象名;流对象名;u流对象名流对象名.open文件名文件名,方,方式;式;u或者或者ufstream流对象名流对象名.open文件名文件名,方式方式u方法二:方法二:u 翻开写文件翻开写文件uofstream 流对象名;流对象名;u流对象名流对象名.open文件名文件名;u或者或者uofstream流对象名流对象名.open(文件文件名名;u 翻开读文件翻开读文件uifstream流对象名;流对象名;u流对象名流对象名.open(文件名文件名);u或者或者uifstream 流对象名流对象名.open文件文件名名;u2 封锁文件方法封锁文件方法u流
18、对象名流对象名.close( );打开方式打开方式说明说明ios in打开文件进行打开文件进行读读操作,这种方式可避免删除现操作,这种方式可避免删除现存文件的内容存文件的内容ios out打开文件进行打开文件进行写写操作,这是默认模式操作,这是默认模式ios ate打开一个已有输入或输出文件并查找到打开一个已有输入或输出文件并查找到文件尾文件尾ios app打开文件以便在文件的打开文件以便在文件的尾部添加尾部添加数据数据ios nocreate 如果文件不存在,则打开操作失败如果文件不存在,则打开操作失败ios noreplace如果设置了如果设置了ios ate或或ios app,则可打开已
19、,则可打开已有文件,否则不能打开有文件,否则不能打开ios binary指定文件以指定文件以二进制二进制方式打开,默认为文本方式方式打开,默认为文本方式ios trunc如文件存在,将其长度截断为零并清除原有内如文件存在,将其长度截断为零并清除原有内容容2. 文本文件的操作,见例文本文件的操作,见例13-4#include #include int main()ofstream out(grade);if(!out)cout Cannot open grade file.n;return 1;out C+ 89.5 endl;out English 93.5 endl;out Maths 87
20、 endl;out.close();return 0;例例13-5 读取例读取例13-4创建的创建的“grade文件,文件,并将文件内容显示在屏幕上。并将文件内容显示在屏幕上。int main()ifstream in(grade);if(!in)cout course grade;cout course grade course grade;cout course grade course grade;cout course grade 运算符读取文本文件时,会运算符读取文本文件时,会发生一些字符转换,空白字符被忽略。发生一些字符转换,空白字符被忽略。假设想要阻止进展字符转换,必需翻假设想要
21、阻止进展字符转换,必需翻开一个以二进制方式访问的文件。开一个以二进制方式访问的文件。u参见例参见例13-6u下面以将内存中存放数组下面以将内存中存放数组a的内容写入的内容写入data.dat文件为例。文件为例。a在在VC中占中占20个字个字节,用节,用len表示。表示。u 运用运用ofstream构造函数中的方式参构造函数中的方式参量指定二进制输出方式量指定二进制输出方式:u ofstream wf(data.dat,ios binary);u wf.write(char *)a, len);u 运用运用ofstream构造一个输出流,然后运构造一个输出流,然后运用用open函数指定写入方式函
22、数指定写入方式:u ofstream wf;u wf.open(data.dat,ios binary);u wf.write(char *)a, sizeof a);u 构造一个流之后,再运用构造一个流之后,再运用setmode成员函成员函数改动方式数改动方式:u ofstream wf(data.dat);u wf.setmode(filebuf binary);u wf.write(char *)a, len); u 运用二进制操作符替代运用二进制操作符替代setmode成成员函数员函数:u ofstream wf(data.dat);u wfbinary;u wf.write(char
23、 *)a, len); u建议不要运用后面两种,由于它们不建议不要运用后面两种,由于它们不能运用默许的命名空间。能运用默许的命名空间。二进制文件的操作二进制文件的操作uint main(int argc, char *argv)uchar ch;uif(argc!=2) ucout Usage: ProgramName n;ureturn 1;uifstream in(argv1, ios:in | ios:binary);uif(!in) ucout Cannot open file.;ureturn 1;uwhile(in) / in will be false when eof is r
24、eacheduin.get(ch);uif(in) cout ch;uureturn 0;u随机文件操作随机文件操作u4. 随机文件操作随机文件操作uC+不仅可以顺序访问文件,还可以不仅可以顺序访问文件,还可以随机访问。为实现对文件的随机访问,随机访问。为实现对文件的随机访问,I/O流类库提供了定位读指针和定位写流类库提供了定位读指针和定位写指针的成员函数。指针的成员函数。1 定位读指针的成员函数定位读指针的成员函数uistream & istream seekg(流中位置;流中位置;uistream & istream seekg(偏移量,偏移量,参照位置;参照位置;ulon
25、g istream tellg( );u其中,流中位置和偏移量都是其中,流中位置和偏移量都是long型量,用字节数表示。参照位置有如型量,用字节数表示。参照位置有如下几种:下几种:ucur=1相对于当前指针位置相对于当前指针位置ubeg=0相对于流的开场位置相对于流的开场位置uend=2相对于流的结尾位置相对于流的结尾位置2 定位写指针的成员函数定位写指针的成员函数uostream & ostream seekp(流中位流中位置置);uostream & ostream seekp(偏移偏移量,参照位置;量,参照位置;ulong ostream tellp( );5.错误处置函
26、数错误处置函数u在对一个流对象进展在对一个流对象进展I/O操作时,能够操作时,能够会产生错误。例如,遇到不期望的输会产生错误。例如,遇到不期望的输入字符或由于磁盘已满而无法再向文入字符或由于磁盘已满而无法再向文件中输出数据等。件中输出数据等。get函数和函数和put函数函数u#include uusing namespace std;uint main()uuchar ch;uwhile(ch=cin.get()!=X)ucout.put(ch);ureturn 0;uRead函数函数()和和write函数函数()u#include u#include uusing namespace std
27、;uint main()uint a10=0,1,2,3,4,5,6,7,8,9;uofstream my(test.dat,ios:out|ios:binary);umy.write (char *)a,sizeof(a);umy.close();uint b10;uifstream my1(test.dat,ios:in|ios:binary);umy1.read (char *)b,sizeof(b);umy1.close();ufor(int i=0;i10;i+)coutbiendl;ureturn 0;u程序设计举例程序设计举例u例例13-4 创建一个名为创建一个名为“grade的
28、文本的文本文件,并写入了文件,并写入了3门课程的名字和成果。门课程的名字和成果。 u例例13-5 读取例读取例13-4创建的创建的“grade文文件,并将文件内容显示在屏幕上。件,并将文件内容显示在屏幕上。 u例例13-6 :以二进制方式访问的文件:以二进制方式访问的文件 u例例13-7 :随机访问:随机访问 u例例13-8 修正第修正第11章实例编程的章实例编程的Date类,类,重载重载和和运算符;运算符;u13.7 规范模板库规范模板库STL简介简介 u STL是由惠普公司的是由惠普公司的Alexander Stepanov和和Meng Lee开发的,并且开发的,并且David Musser也有艰苦奉献。也有艰苦奉献。STL曾曾经成为经成为ANSI/ISO C+规范的一部分,规范的一部分,得到越来越广泛的运用。得到越来越广泛的运用。例例13-8 修正第修正第11章实例编程的章实例编程的Date类,重载类,重载运运算符,输出算符,输出Date对象。对象。u在在Date.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《隐患排查治理行动方案》课件深度解析教学设计(大学本科安全工程专业四年级)
- 《初中二年级道德与法治“人民当家作主”单元核心概念建构教学设计》
- 宣传预热策划方案范本
- 八年级物理上册《光现象与透镜》单元实验探究深度复习教案
- 八年级物理上册《测量平均速度》考点专题训练教学设计
- 本科中医学专业《温病学》症状鉴别与卫气营血辨证交互式教案
- 初中八年级地理《黄土高原生态治理与高质量发展》教学设计
- 2026学年浙江省乐清市六年级数学期末自我评估黑金试题(详细参考解析)详细答案和解析
- 企业安防信息化风险管理
- 2026年膝骨性关节炎试题及答案
- 2026年生物制药CDMO服务行业趋势报告
- 针对老年人的反诈宣传
- 2025年内蒙古自治区专升本化学考试试题及答案
- 《胸痛中心建设与管理指导原则(试行)》
- 河南省豫西北教研联盟(平许济洛四市)2026届高三下学期3月第三次质量检测语文试题(含答案)
- 2026年统计执法监督人员考试题库及答案
- 心衰患者康复运动课件
- 第一性原理培训讲座课件
- 食品机械安全培训课件
- 中国热带农业科学院院属单位2026年第一批公开招聘工作人员备考题库及完整答案详解一套
- 心肺康复治疗进展
评论
0/150
提交评论