13 输入输出流.ppt
《13 输入输出流.ppt》由会员分享,可在线阅读,更多相关《13 输入输出流.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第13章 输入输出流13.1 C+的输入输出13.2 标准输出流13.3 标准输入流13.4 文件操作与文件流13.1 C+的输入和输出(I/O)n输入和输出,要看以什么为对象 n以标准I/O设备为对象n从键盘、鼠标得到的数据是进入从键盘、鼠标得到的数据是进入内存内存的,该数据是输入数据。的,该数据是输入数据。n将数据从将数据从内存内存送到显示器、打印机等,该数据是输出数据。送到显示器、打印机等,该数据是输出数据。n以外存磁盘文件为对象n内存中的数据内存中的数据存储到磁盘文件中,叫输出文件;存储到磁盘文件中,叫输出文件;n从磁盘文件中的数据装载入从磁盘文件中的数据装载入内存中内存中,叫输入文件
2、。,叫输入文件。n以内存中指定的空间作为对象n常指定一个字符数组作为存储空间,这种常指定一个字符数组作为存储空间,这种I/O称为字符串的输入称为字符串的输入输出。输出。nC+采取不同的方法实现以上三种采取不同的方法实现以上三种I/O。标准标准I/O文件文件I/O串串I/On数据之间的传输过程称作流(stream)n输输入入流流表表示示数数据据从从某某个个载载体体或或设设备备传传送送到内存到内存n输输出出流流表表示示数数据据从从内内存存传传送送到到某某个个载载体体或设备或设备C+的输入输出流内内存存键盘键盘文件文件光笔光笔.输入流输入流显示器显示器文件文件打印机打印机.输出流输出流n在进行I/O
3、操作时n首先进行首先进行“打开打开”操作,使流和文件发生联系操作,使流和文件发生联系n建立联系后的文件才允许数据流入或流出建立联系后的文件才允许数据流入或流出nI/O结束后,使用结束后,使用“关闭关闭”操作使文件与流断开联系。操作使文件与流断开联系。nC+将I/O流定义为类流类。属于流类的对象是流对象n系系统统已已经经以以运运算算符符或或函函数数的的形形式式做做好好了了对对标标准准外外设设(键键盘盘、显显示示器器、打打印印机机、文文件件)的的接接口口,使使用用时时只需按照要求的格式调用即可。只需按照要求的格式调用即可。n如:如:cin 标准输入流对象。标准输入流对象。cout 标准输出流对象。
4、标准输出流对象。C+的输入输出流类的定义n类是一种复杂的数据类型n它是将它是将不同类型的数据不同类型的数据和和与这些数据相关的运算与这些数据相关的运算封装在一起的集合体。封装在一起的集合体。n它使类中的数据得到很好的它使类中的数据得到很好的“保护保护”,在大型程,在大型程序中不会被随意修改。序中不会被随意修改。n在C+中,结构体类型只是类的一个特例 实例化实例化圆类圆类 数据成员数据成员 半径半径 成员函数成员函数 置半径值置半径值 求周长求周长 求面积求面积类的变量即为对象。类的变量即为对象。对象是类的实例对象是类的实例C+的各种I/O流类库nC+为实现数据的I/O定义了一个庞大的类库。它包
5、括的类主要有C+I/O类库中的其他类包含头文件n在一个程序中包含一个头文件的命令格式为#include n常用的I/O类库有I/O操作类型必须包含的头文件需要进行需要进行标准标准I/O操作操作iostream需要进行需要进行文件文件I/O操作操作fstream需要进行需要进行串串I/O操作操作strstream使用使用格式化格式化I/Oiomanip在iostream中定义的4个流对象 cin,cout,cerr,clog对象含义对应设备对应的类cin标准输入流标准输入流键盘键盘istream_withassigncout标准输出流标准输出流显示器显示器ostream_withassignce
6、rr或或clog标准错误流标准错误流13.2 标准输出流 n标准输出流流向标准输出设备(显示器)的数据 ncout流对象在控制台(显示器)输出n用用流插入运算符流插入运算符“”向向cout输出数据输出数据.n如:cout “a=”a endl;cout 数据数据1 数据数据2 数据数据3;ncerr流对象在控制台(显示器)输出错误信息n用用流插入运算符流插入运算符“”向向cerr输出数据输出数据.n如:cerr “除数为除数为0,出错出错!”endl;cerr的用法与的用法与cout类似类似.ncout流对象与cerr流对象的不同之处ncout的输出默认是显示器的输出默认是显示器,但可以被重定
7、向为输出到磁但可以被重定向为输出到磁盘文件盘文件ncerr只能定向输出到显示器只能定向输出到显示器 例13.1 解一元二次方程ax2+bx+c=0 的解void main()float a,b,c,disc;cout a b c;if(a=0)cerr “a=0,不是二次方程,出错!不是二次方程,出错!”endl;else disc=b*b-4*a*c;if(disc0)cerr“二次方程无实根。二次方程无实根。”endl;else cout“x1=”(-b+sqrt(disc)/(2*a)endl;cout“x2=”(-b-sqrt(disc)/(2*a)endl;标准输出流n标准输出流流向
8、标准输出设备(显示器)的数据nclog流对象在控制台(显示器)输出错误信息.n用用流插入运算符流插入运算符“”向向clog输出数据输出数据.n如如:clog “除数为除数为0,出错出错!”endl;n clog的用法与的用法与cerr类似类似.nclog流对象与cerr流对象的不同之处ncerr是不经过缓冲区,直接向显示器输出有关信息。是不经过缓冲区,直接向显示器输出有关信息。nclog的输出先存储在缓冲区,遇到缓冲区满或遇到的输出先存储在缓冲区,遇到缓冲区满或遇到endl时才向显时才向显示器输出。示器输出。使用控制符控制格式输出控制符作用dec设置整数的基数为设置整数的基数为10hex设置整
9、数的基数为设置整数的基数为16oct设置整数的基数为设置整数的基数为8setfill(c)设置填充字符设置填充字符csetprecision(n)设置实数的显示精度为设置实数的显示精度为n位位setw(n)设置字段宽度为设置字段宽度为nsetiosflags(ios:fixed)实数以固定的小数位数显示实数以固定的小数位数显示#include#include using namespace std;void main()int a;cout a;/a=34 cout“dec:”decaendl;cout“hex:”hexaendl;cout“oct:”octaendl;coutsetfill(
10、*)setw(10)decaab;/从键盘输入2个整数n当输入时n遇到无效的字符遇到无效的字符n或遇到文件结束符或遇到文件结束符 ctrl+z 时时 cin处于出错状态,无法正常提取数据(cin=false).if(!cin)cout“输入出错输入出错”;21 abc 用于字符输入的流成员函数1.不带参数的get函数 cin.get()n功能功能n从输入流提取从输入流提取1个字符个字符;n函数返回值就是该字符函数返回值就是该字符.n若遇到若遇到文件结束符文件结束符,则返回值为则返回值为EOF,即即-1.n如:char ch;while(ch=cin.get()!=EOF)cout.put(ch
11、);键盘输入键盘输入:显示显示:键盘输入键盘输入:I study C+.(程序结束程序结束)I study C+.Ctrl+ZEOFEnd Of File字符输出的流成员函数,字符输出的流成员函数,功功能能在显示器上显示一个在显示器上显示一个字符字符用于字符输入的流成员函数2.带1 个参数的get函数 cin.get(ch)n功能功能n从输入流提取从输入流提取1个字符放入个字符放入ch;n函数返回值就是非函数返回值就是非0值值n若遇到若遇到文件结束符文件结束符,则返回值为则返回值为0n如:char ch;while(cin.get(ch)!=0)cout.put(ch);键盘输入键盘输入:显示
12、显示:键盘输入键盘输入:I study C+.(程序结束程序结束)I study C+.Ctrl+Z用于字符输入的流成员函数3.带3 个参数的get函数 cin.get(字符字符数组数组,字符个数字符个数n,终止字符终止字符)或或 cin.get(字符字符指针指针,字符个数字符个数n,终止字符终止字符)n功能功能n从输入流提取从输入流提取n-1个字符放入数组个字符放入数组;n函数返回值就是非函数返回值就是非0值值n若遇到若遇到文件结束符文件结束符,则返回值为则返回值为0n如 char str20;cin.get(str,10,“n”);coutstr;键盘输入键盘输入:显示显示:I study
13、 CI study C+.用于字符输入的流成员函数4.cin.getline函数函数可输入一行字符可输入一行字符 cin.getline(字符字符数组数组,字符个数字符个数n,终止字符终止字符)或或 cin.getline(字符字符指针指针,字符个数字符个数n,终止字符终止字符)n功能功能n从输入流提取从输入流提取n-1个字符放入数组个字符放入数组;n函数返回值就是非函数返回值就是非0值值n若遇到若遇到文件结束符文件结束符,则返回值为则返回值为0n如 char str20;cin.get(str,10,“n”);coutstr;键盘输入键盘输入:显示显示:I study CI study C+
14、.cin.get()与 cin.getline()的比较 cin.get(字符数组字符数组,字符个数字符个数n,终止字符终止字符)cin.getline(字符指针字符指针,字符个数字符个数n,终止字终止字符符)n相同之处:n从输入流提取从输入流提取n-1个字符放入数组个字符放入数组,n函数返回值是非函数返回值是非0值值.n若遇到文件结束符若遇到文件结束符,则返回值为则返回值为0.n不同之处:n当读到终止字符时,当读到终止字符时,ncin.getline()将指针移到将指针移到终止字符之后终止字符之后。ncin.get()将指针移到将指针移到终止字符处终止字符处。n则下次继续读取时的位置就不同。
15、13.4 文件操作与文件流n文件 n存储在某种设备(磁带、光盘、软盘或硬盘)存储在某种设备(磁带、光盘、软盘或硬盘)上数据的集合;上数据的集合;n对用户来说,文件分成两大类:n 程序文件程序文件n 数据文件数据文件n从文件中数据的组织形式来分:n ASCII文件(文本文件)文件(文本文件)n 二进制文件二进制文件文本文件和二进制文件n文本文件(ASCII文件):n文件中的内容都是字符文件中的内容都是字符,以以ASCII码形式存在码形式存在文件内文件内.n如如:12345在文本文件中是以在文本文件中是以 1,2,3,4,5共共 5个字符个字符形式存储的形式存储的n二进制文件:n文件中的内容是以数
16、据的二进制形式存储的文件中的内容是以数据的二进制形式存储的.n如如:12345在二进制文件中按在二进制文件中按1个整数类型以二个整数类型以二进制形式存储进制形式存储,占占4个字节空间个字节空间文件流 C+在头文件在头文件fstream.h中定义了中定义了C+的文件流类体系的文件流类体系,当当程序中使用文件时,程序中使用文件时,要包含头文件要包含头文件fstream.h。iosifstream(输入流输入流)ofstream(输出流输出流)fstream在在“fstream.h”中说明中说明当使用文件时,在程序头有:当使用文件时,在程序头有:#include其中定义了各种文件操作运算符及函数。其
17、中定义了各种文件操作运算符及函数。文件流n用标准流进行用标准流进行I/O时,系统自动地完成数据时,系统自动地完成数据类型的转换。类型的转换。n对于输入流,要将输入的字符序列形式的数对于输入流,要将输入的字符序列形式的数据变换成计算机内部形式的数据(二进制据变换成计算机内部形式的数据(二进制或或ASCII)后,再赋给变量,变换后的格式)后,再赋给变量,变换后的格式由变量的类型确定。由变量的类型确定。n对于输出流,将要输出的数据变换成字符串对于输出流,将要输出的数据变换成字符串形式后,送到输出流(文件)中。形式后,送到输出流(文件)中。内存变量内存变量(程序程序)键盘键盘输入文件输入文件屏幕屏幕输
18、出文件输出文件cinxcoutxoutfilexcoutxoutfilex简单的文件I/O要让程序将数据写入文件,必须:创建一个ofstream对象来管理输出流;将该对象与特定的文件关联起来;以使用cout的方式使用该对象,唯一的区别是:输出将进入文件,而不是屏幕;#include /必须包含的头文件必须包含的头文件 using namespace std;void main()int a=12,b=34;ofstream fout;/定义定义ofstream类对象类对象fout fout.open(c:c_05temptest.dat,ios:out);/使文件流与使文件流与test.dat
19、建建立关联立关联 foutaendl;foutbendl;fout.close();/将输出文件流所关联的磁盘文件将输出文件流所关联的磁盘文件关闭关闭例 将int a=12,b=34写到磁盘文件中读取文件#include using namespace std;void main()int a,b;ifstream infile;infile.open(c:c_05temptest.dat,ios:in);infileab;couta=aendl;coutb=bendl;infile.close();文本文件的打开与关闭n在文件操作前,需要将程序与被操作的文件联系在文件操作前,需要将程序与被操
20、作的文件联系起来,使程序可以起来,使程序可以“引用引用”文件。文件。n在程序内定义一个文件类的在程序内定义一个文件类的对象对象,由,由该对象该对象与文与文件发生联系,程序内所有的与文件的操作都是对件发生联系,程序内所有的与文件的操作都是对该对象该对象的操作。的操作。fstream infile,outfile;定义两个对象,可以联系两个定义两个对象,可以联系两个输入输出输入输出文件文件 ifstream infile;定义一个对象只能联系定义一个对象只能联系输入输入文件文件 ofstream outfile;定义一个对象只能联系定义一个对象只能联系输出输出文件文件iosifstream(输入流
21、输入流)ofstream(输出流输出流)fstream在在“fstream.h”中说明中说明定义用于输入定义用于输入的文件对象的文件对象定义用于输出定义用于输出的文件对象的文件对象定义用于输入输定义用于输入输出的文件对象出的文件对象文件对象与包含文件头的关系文件的打开与关闭n如何使文件类的对象与欲操作的文件发生联系?如何使文件类的对象与欲操作的文件发生联系?n用对象打开文件n方法一:ofstream outfile;/定义输出文件类对象定义输出文件类对象 outfile.open(“d:mydoca1.dat”);格式:格式:文件流对象文件流对象.open(文件名文件名)n方法二:定义对象时直
22、接初始化定义对象时直接初始化ofstream outfile(“d:mydoca1.dat”);打开文件打开文件“a1.dat”用于输出,并将此文件与输出文件类对用于输出,并将此文件与输出文件类对象象outfile建立联系建立联系今后今后在程序中,用到文件在程序中,用到文件“a1.dat”的地方就用的地方就用outfile来代来代替。替。文件的打开n在打开文件后,都要判断打开是否成功在打开文件后,都要判断打开是否成功n若打开成功,则文件流对象值为非零值;若打开成功,则文件流对象值为非零值;n若打开不成功,则其值为若打开不成功,则其值为0。ifstream pfile1;/定义输入文件类对象定义
23、输入文件类对象ofstream pfile2;/定义输出文件类对象定义输出文件类对象pfile1.open(“file1.txt”);pfile2.open(“file2.txt”,);if(!pfile1)/若为若为0,打开文件操作失败,打开文件操作失败 cerr”不能打开输入文件不能打开输入文件:file1.txt”endl;exit(1);if(!pfile2)cerr”不能打开输出文件不能打开输出文件:file2.txt”xy;myfile1.txt3 4内存内存infilexy34用用infile代代替替myfile1.txt进行操作。进行操作。如何从文件中读出数据?ifstream
24、 outfile;/定义输出文件类对象定义输出文件类对象infile.open(“myfile2.txt”);/利用函数打开某一文件利用函数打开某一文件 float x3,y4;outfilextyxy;outfilextyendl;infile.close();outfile.close();myfile1.txt3 4内存内存infilexy34myfile2.txtoutfile34infile.close();outfile.close();用完文件后,使用成员函数关闭文件#include#include using namespace std;void main()int a10;o
25、fstream outfile(“f1.dat”);/定义文件流对象,打开文件定义文件流对象,打开文件f1.dat if(!outfile)/若打开失败,返回若打开失败,返回 0值值 cerropen error!endl;exit(1);coutenter 10 integer numbers:endl;for(int i=0;iai;outfileai;/向文件向文件f1.dat输出数据输出数据 outfile.close();/关闭文件关闭文件f1.dat 例13.11 有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组送到磁盘文件地f1.dat中存放。文件处理流程文件处
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13 输入输出流 输入输出
限制150内