第9章 C++语言的输入输出流库.ppt_第1页
第9章 C++语言的输入输出流库.ppt_第2页
第9章 C++语言的输入输出流库.ppt_第3页
第9章 C++语言的输入输出流库.ppt_第4页
第9章 C++语言的输入输出流库.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 C+语言的I/O流库,数据的传送被看成像流水一样,从一处流向另一处,数据的传递被称为数据流。 数据流中流动的字节序列。 数据流按其流向可分为: 输入流 指的是字节流从输入设备流向内存。 输出流 指的是字节流从内存流向输出设备。 输入流和输出流都是带有内存缓冲区的,用来存放流中的数据。流是与内存缓冲区相对应的。,第9章 C+语言的I/O流,第9章 C+语言的I/O流,数据流分类: 对系统指定的标准设备的输入和输出。 以外存磁盘文件为对象进行输入和输出。 对内存中指定的空间进行输入和输出。,重要的输入流类: istreamifstream istrstream,重要的输出流类: ostre

2、am ofstream ostrstream,1通用I/O流类库 使用这些功能时应包含头文件iostream.h。,ios,istream,ostream,iostream,提供流状态设置功能,提供从输入流提取数据的操作,第9章 C+语言的I/O流,2文件I/O流类库 使用有关文件读写操作时,应包含fstream.h文件。,ios,istream,ostream,iostream,fstreambase,ifstream,ofstream,fstream,C+的I/O对C的发展类型安全和可扩展性,在C语言中,用printf和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。

3、 在C+的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。因此C+的I/O操作是类型安全的。 C+的I/O操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。,在iostream头文件定义了4种流对象 cin是istream类的对象,用来处理标准输入,即键盘输入。 cout是ostream类的对象,用来处理标准输出,即屏幕输出。 Cerr是ostream类的对象,用来处理标准错误信息,没有缓冲,发送给它的内容立即被输出。 clog是ostream类的对象,用来处理输出信息,它提供打印机输出。,第9章 C+语言的I/O流,9.1

4、.1 使用预定义的插入符 这是一种最简单的,也是最常用的方式。 格式如下: cout ,“”在iostream头文件中对它们进行了重载。如 ostream operator (int ); ostream operator (float ); ostream operator (char ); ostream operator (char *);,9.1 屏幕输出,例 分析下列程序的输出结果。 程序内容如下: #include #include void main() coutThis is a string.endl; coutstrlen(This is a string.)endl; ,

5、例 分析下列程序的输出结果。 #include void fun(int,int); void main() fun(20,0); fun(205,5); void fun(int i,int j) if(j=0) cerrzero encountered.n; else couti/jendl; ,把一个字符写到输出流中。 如: cout.put(a); 参数可以是字符或ASCII码 cout.put(65+32); 连续调用put函数 cout.put(71).put(79).pu(79).put(68).put(n);,GOOD,9.1.2 使用成员函数put()输出一个字符,例 分析下

6、列程序的输出结果。 #include void main() coutHELLOendl; cout.put(H).put(E).put(L).put(L).put(O).put(n); char c1=A,c2=B; int a=65; cout.put(c1).put(c2)endl; cout.put(char(a).put(char(66)endl; ,格式如下: cout.write (const char *str, int n),#include #include void print(char *s) cout.write(s,strlen(s).put(n); cout.wr

7、ite(s,6)endl; ,void main() char *str=I love China.; coutThe string is strendl; print(str); ,9.1.3 使用成员函数write()输出一个字符串,9.2.1 使用预定义的提取符,格式如下: cin 从键盘上输入数据是带缓冲区的,输入完数据按回车键时才形成输入流。 输入流中数据项的默认分隔符为空格、tab键、换行符等空白符。,9.2 键盘输入,例 分析下列程序的输出结果。 #include void main() int i,j; coutij; coutcinendl; couti,jendl; ,例

8、使用提取符从键盘上获取整数,判断该数是大于0、小于0还是等于0,当输入非整数时退出程序。 #include void main() int n; coutn) if(n0) cout0n; else if(n0) coutn0n; else coutn=0n; coutno integer!n; ,格式如下: char istream:get(),#include void main() char ch; coutEnter charactors: ; while(ch=in.get()!=EOF cout.put(ch); ,9.2.2 使用成员函数get()获取一个字符,格式如下: cin

9、.getline(char *buf,int n,char deline=n),9.2.3 使用成员函数getline()读取一行字符,例 分析下列程序的输出结果,该程序中使用了getline()函数。 #include void main() char buf80; int lcnt(0),lmax(-1); coutlmax) lmax=count; coutLine#lcnt:countendl; cout.write(buf,count).put(n).put(n); coutLargest line:lmaxendl; coutTotal line: lcntendl; ,格式如下:

10、 cin.read (char *buf,int n),#include void main() char buf80=; coutEnter :n; cin.read(buf,80); coutbufendl; ,9.2.4 使用成员函数read()读取若干字符,9.3 格式化输入和输出,使用流对象的成员函数 使用控制符的方法,1控制输入/输出格式的标志位 用来控制输入/输出格式的标志位如表,9.4.1 使用流对象的成员函数进行格式输出,表 ios标志位,一些用来控制输出格式的成员函数: (1)设置标志字的成员函数 long flags() 该函数返回当前标志字。 long flag(lon

11、g) 该函数使用参数更新标志字,并返回更新前的标志字。 long setf(long setbits, long field) 该函数用来将field参数所指定的标志位清零,将setbits所指的标志位置1,并返回设置前的标志字。,2控制输出格式的成员函数,long setf(long) 该函数用来设置参数的指定的那些标志位,并返回更新前的标志字。 long unsetf(long) 该函数用来清除参数所指定的那些标志位,并返回更新前的标志字。,1)设置输出数据所占宽度的成员函数 int width() 该函数用来返回当前输出的数据宽度。 int width(int) 该函数用来用其参数设置当

12、前输出的数据宽度,并返回更新前的宽度值。,9.4.2 格式化输出,2)设置填充符的成员函数 char fill() 该函数用来返回当前所用的填充符。 char fill(char) 该函数用来设置当前的填充符为参数给定的字符,并返回更新前的填充符。,9.4.2 格式化输出,3)设置浮点数输出精度的成员函数 int precision() 该函数用来返回当前浮点数的有效数字的个数。浮点数的精度是用有效数字个数来表示的,其个数越大,表示精度越高。 int precision(int) 该函数用来设置当前浮点数输出时有效数字个数为该函数所指定的参数值,并返回更新前的值。,9.4.2 格式化输出,下面

13、给出在默认情况下的某些参数的值: 数据输出宽度默认情况下为实际宽度; 默认情况下填空符为空格符; 单精度浮点数最多提供7位有效数字,双精度浮点数最多提供15位有效数字,长双精度浮点数最多提供19位有效数字。,例 分析下列程序的输出结果。 #include void main() coutDEC: 85endl; cout.setf(ios:hex,ios:basefield); coutHEX: 85endl; cout.setf(ios:showbase); coutHEX: 85endl; cout.setf(ios:oct,ios:basefield); coutOCT: 85endl;

14、 cout.setf(ios:dec,ios:basefield); coutDEC: 85endl; ,#include void main() cout12345678901234567890endl; int i=12345; coutiendl; cout.width(10); coutiendl; cout.width(10); cout.fill(*); cout.setf(ios:left,ios:adjustfield); coutiendl; cout.setf(ios:right,ios:adjustfield); cout.precision(6); double d=1

15、23.456789; coutdendl; cout.setf(ios:scientific,ios:floatfield); coutdendl; coutwidth: cout.width()endl; ,使用控制符时需包含iomanip.h头文件。 控制符可以直接插入到输出流中。,9.4.3 操作子,表10.2流类库所定义的操作子,#include #include void main() cout12345678901234567890endl; int i=12345; coutiendl; coutsetw(10)iendl; coutresetiosflags(ios:right

16、)setiosflags(ios:left) setfill(*)setw(10)iendl; double d=123.456789; coutsetfill( )setprecision(6)setw(10)dendl; cout.setf(ios:scientific,ios:floatfield); coutdendl; coutwidth: cout.width()endl; ,9.5.1 打开文件和关闭文件操作,1打开文件,打开文件通常分为两步: 先创建流对象 再使用成员函数open()打开指定的文件。 创建流对象又可分两种情况 一种情况是创建fstream类的对象 另一种情况是创

17、建ifstream类或ofstream类的对象。,9.5 磁盘文件的输入和输出,(1)通过创建fstream类对象打开文件的方法 方法一:先创建对象,再打开文件 格式如下: fstream ; .open(,);,表10.3文件访问方式常量,方法二:创建对象和打开文件合二为一 其格式如下: fstream (, ); 与前面方法相比较,省略了打开函数的名字open。,(2)通过创建ifstream类对象或ofstream类对象打开文件的方法 方法一:先创建对象,再打开文件 格式如下: ofstream ; .open (); 或者 ifstream; .open();,方法二:创建对象同时打开

18、文件 格式如下: ofstream (); 或者 ifstream ();,格式如下: .close();,2关闭文件,先打开文件,打开文件时应先创建流对象,打开文件时应指出文件名和访问方式; 文件打开后才可以进行读写操作; 操作完毕后还要关闭文件。,9.5.2 文本文件的读写操作,例 编程将一些字符信息写入到指定的文件中。 #include #include #include void main() fstream out; out.open(f1.txt,ios:out); if(!out) cerrf1.txt cant open.n; abort(); outthis is a str

19、ing.n; outthis is a program.n; outok!n; out.close(); ,例 编程从一个文本文件中读出的存放的信息。 #include #include #include void main() fstream in; in.open(f1.txt,ios:in); if(!in) cerrf1.txt cant open.n; abort(); char s80; while(!in.eof() in.getline(s,sizeof(s); coutsendl; in.close(); ,例 编程将一个文件的内容复制到另一个文件中。 #include #i

20、nclude #include void main() fstream infile,outfile; infile.open(f2.txt,ios:in); if(!infile) cerrf2.txt cant open.n; abort(); outfile.open(f3.txt,ios:out); if(!outfile) cerrf3.txt cant open.n; abort(); char ch; while(infile.get(ch) outfile.put(ch); infile.close(); outfile.close(); ,二进制文件的读写操作与文本文件的读写操作基本相同; 区别在于 二进制文件来说打开时需要加上ios:binary方式。 用于二进制文件读写函数通常使用read()函数和write()函数。,9.5.3 二进制文件的读写操作,例 分析下列程序的输出结果,熟悉二进制文件的使用方法。 #include #include #include struct person char name20; double height; unsigned sho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论