C++程序设计:第3章 数据的输入和输出

上传人:大米 文档编号:570180380 上传时间:2024-08-02 格式:PPT 页数:48 大小:141.50KB
返回 下载 相关 举报
C++程序设计:第3章 数据的输入和输出_第1页
第1页 / 共48页
C++程序设计:第3章 数据的输入和输出_第2页
第2页 / 共48页
C++程序设计:第3章 数据的输入和输出_第3页
第3页 / 共48页
C++程序设计:第3章 数据的输入和输出_第4页
第4页 / 共48页
C++程序设计:第3章 数据的输入和输出_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C++程序设计:第3章 数据的输入和输出》由会员分享,可在线阅读,更多相关《C++程序设计:第3章 数据的输入和输出(48页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 数据的输入和输出数据的输入和输出C+语言使用的输入语言使用的输入/ /输出功能输出功能: :(2)C+语言中特有的功能需要包含语言中特有的功能需要包含“iostream.hiostream.h”文件文件(1 1)C语言中的函数语言中的函数: :如如scanf( )、printf( )等等 需要包含需要包含“stdio.h”文件文件 “ “流流”(1)“文本流文本流”:文本流是一个字符序列。:文本流是一个字符序列。 (2)“二进制流二进制流”:二进制流是一组字节序列。:二进制流是一组字节序列。 “流流”的类型的类型 “文文 件件”本本章章只只介介绍绍C+语语言言中中特特有有的的通通

2、过过流流类类来来进进行行标标准准输入输出以及文件的处理过程。输入输出以及文件的处理过程。“文文件件”是是一一个个逻逻辑辑的的概概念念,它它可可用用于于从从磁磁盘盘文文件件到到终终端端的的任任何何东东西西。通通过过打打开开操操作作,便便可可将将一一个个“流流”同同一一个个特特定定的的文文件件联联系系起起来来,文文件件打打开开以以后后,程程序序就就可可以以同同文文件件交交换换数数据据了了,而而通通过过关关闭闭操操作作,则可将文件与特定的则可将文件与特定的“流流”之间的联系断开。之间的联系断开。3.1 标准输入和输出标准输入和输出 istream: 输入用流类输入用流类ostream: 输出用流类输

3、出用流类iostream: 输入输出用流类输入输出用流类 上面三个流类都是在上面三个流类都是在iostream.h头文件中定义的,因此,在用上述三个头文件中定义的,因此,在用上述三个流类进行输入输出时,需要在程序的首部包含进流类进行输入输出时,需要在程序的首部包含进iostream.h头文件。头文件。标准输入标准输入/ /输出的三个流类:输出的三个流类:3.1.1 基于运算符基于运算符的输入输出的输入输出1. 运算符的基本功能运算符的基本功能cin: 标准输入流标准输入流cout: 标准输出流标准输出流cerr: 非缓冲型的标准出错流非缓冲型的标准出错流clog: 缓冲型的标准出错流缓冲型的标

4、准出错流 通过这两个流类对象及插入运算符来进行标准输入输出。 当在程序的首部使用当在程序的首部使用#include 语语句时,系统将自动产生如下句时,系统将自动产生如下4 4个流类对象:个流类对象:【例例3.1】编一程序,利用编一程序,利用cin和和cout对对象进行数据的输入输出操作。象进行数据的输入输出操作。 运行结果:运行结果: Input data: 123 Data is 123 Input String: abcde String is abcde#include void main( ) int dt; char ss80; cout dt; cout “Data is ” dt

5、 “n”; cout ss; cout “String is ” ss 和和和和进行数据的进行数据的输入和输出。输入和输出。 输入与执行结果:输入与执行结果:Input String,int,long,double:Language1010003.14S=Language A=10 B=1000 C=3.14#include void main(void) int ia; long lb; double dc; char ss32; cout ss ia lb dc; cout “S=” ss “A=” ia “B=” lb “C=” dc 来来进进行行连连续续输输入入时时,只只要要根根据据所

6、所需需要要输输入入的的数数据据类类型型(由由变变量量的的类类型型来来判判断断),由由键键盘盘连连续续输输入入即即可可,每每输输入入完完一一个个数据需要按一下回车。数据需要按一下回车。(2)在在利利用用插插入入运运算算符符来来连连续续显显示示数数据据时时,系统会自动根据相应变量的数据类型来显示数据。系统会自动根据相应变量的数据类型来显示数据。2. 格式化输出格式化输出(1)域宽的指定)域宽的指定width( )注:每次输出完成后所设域宽都被清除注:每次输出完成后所设域宽都被清除 利用利用cout对象的对象的width( )成员函数可以设定输成员函数可以设定输出域宽。出域宽。cout.cout.w

7、idth(10);coutcout x; x;用法如下:用法如下:说说 明明: 为了明确地清除所设置的域宽,可以利用为了明确地清除所设置的域宽,可以利用下面的语句:下面的语句: cout.width(0); 此函数执行了以后,输出时的宽度此函数执行了以后,输出时的宽度就采用缺省值,也就是按照实际所就采用缺省值,也就是按照实际所需要的宽度来进行显示。需要的宽度来进行显示。(2)填充文字的指定)填充文字的指定fill( )若所显示的数据宽度小于由若所显示的数据宽度小于由width( )成员函数所指成员函数所指定的域宽,则前面空的位置将由空格来填充。如果定的域宽,则前面空的位置将由空格来填充。如果不

8、想用空格来填充,就可以使用不想用空格来填充,就可以使用fill( )成员函数来设成员函数来设置要填充的文字。置要填充的文字。 cout.fill(#);fill( )函数的用法如下:函数的用法如下:表示不足的位置由表示不足的位置由#填充填充举例举例 cout.width(10); cout.fill($); cout “abcde”; cout n; cout.width(5); cout.fill(#); cout 123; 输出结果如下:输出结果如下: $abcde #123 cout.width(10); cout.fill($); cout “abcden”; cout.width(5

9、); cout.fill(#); cout 123;则其输出结果如下:则其输出结果如下: $abcde #123程序段改为程序段改为如右这样:如右这样:(3)精度的指定)精度的指定precision( ) 在输出浮点数时,可以利用cout对象的precision( )成员函数来指定所要输出的浮点数的位数(包括整数部分的位数和小数部分的位数,但不包含小数点)。 举例举例 cout.width(12); cout.precision(7); cout 1234.56789 n; cout.width(12); cout.precision(5); cout 1234.56789 n;输出结果:输出

10、结果: uuuu1234.568 uuuuuu1234.6最后一位数字是最后一位数字是进行四舍五入运进行四舍五入运算之后显示出来算之后显示出来的。的。(4)输出的刷新)输出的刷新flush( )flush( )成员函数用于刷新输出缓冲区。成员函数用于刷新输出缓冲区。例如:例如:#includeint main(void) char ch; do cout ch; while(ch=Y | ch=y); 程序解释程序解释: 由于每个流(输入由于每个流(输入/输出)都有自己的缓冲区,因此,如输出)都有自己的缓冲区,因此,如果在执行果在执行cin ch; 操作之前操作之前,cout缓冲区没有被刷新的

11、缓冲区没有被刷新的话,此时话,此时,字符串字符串“继续继续(Y/N): ”就有可能显示不出来,就有可能显示不出来,为了保证为了保证cout缓冲区中的数据能够显示出来,就需要调用缓冲区中的数据能够显示出来,就需要调用cout对象对象的的flush( )成员函数成员函数。 cout ch;cin.tie(&cout);如:如:或:或: 3. 控制符处理控制符处理 在数据的输入输出过程中,如果需要指定数据在数据的输入输出过程中,如果需要指定数据的格式,可以使用的格式,可以使用C+语言中提供的控制符。语言中提供的控制符。【例例3.3】编一程序,用于说明控制符的使编一程序,用于说明控制符的使用方法。用方

12、法。 #include void main( ) int dt = 255; cout dec dt n; cout hex dt hex x;(1)cin hex x;表示所输入的是十六进制数。表示所输入的是十六进制数。(2)(2)要想使用控制符,就必须在程序的首部包含要想使用控制符,就必须在程序的首部包含进进iostream.h头文件。头文件。(3)(3)控制控制符符endl的作用同的作用同n是相同的。是相同的。3.1.2 字符的输入和输出字符的输入和输出get( )和和put( ) 在在C+语言中,可以不使用语言中,可以不使用运算符运算符, ,通过通过使用成员函数来进行数据输入输出。使用

13、成员函数来进行数据输入输出。get( )是是cin对象的成员函数,用于输入操作。对象的成员函数,用于输入操作。put( )是是cout对象的成员函数,用于输出操作。对象的成员函数,用于输出操作。【例例3.4】编一程序,利用编一程序,利用get( )函数函数和和put( )函函数来进行数据的输入和输出。数来进行数据的输入和输出。 #include void main( ) char ch; while(cin.get(ch) cout.put(ch); 说明:说明:( (1) )get( )函函数数出出错错时时返返回回null,正常时返回正常时返回this指针。指针。(2)(2)每每输输入入一一

14、个个字字符符按按一一下下回回车车,最最后后结结束束时时按按ctrl+zctrl+z即即可。可。 3.1.3 字符串的输入字符串的输入get( )和和getline( )istream& get(char *ss, int count, char delim=n);istream& getline(char *ss, int count, char delim=n); get( )和和getline( )是是cin对象中的成员函数对象中的成员函数定义形式如下:定义形式如下:ss:缓冲区指针缓冲区指针count:最多向最多向ss存入存入count个字符个字符delim:如果遇到此字符,输入结束如果

15、遇到此字符,输入结束其中:其中:注意事项注意事项 对于字符串输入来讲,对于字符串输入来讲,get( )和和getline( ) 函数的功能基本相同,但函数的功能基本相同,但get( )函数并不读入函数并不读入由由delim标识的区分字符,而标识的区分字符,而getline( )函数读入函数读入由由delim标识的区分字符。标识的区分字符。【例例3.5】编一程序,利用编一程序,利用get( )和和getline( )成员函数来输入数据,并比较其差异。成员函数来输入数据,并比较其差异。#include void main( ) char ss80; cout“getline testn”; cou

16、t“First string:”; cin.getline(ss,80); cout“First string is“ss”n”; cout“Second string:”; cin.getline(ss,80); cout“Second string is“ss”n”; cout“get testn”; cout“First string:”; cin.get(ss,80); cout“First string is“ss” n”; cout“Second string:”; cin.get(ss,80); cout“Second string is“ss”n”; 程序的执行结果如下:程序的

17、执行结果如下:getline testFirst string:ABCFirst string isABCSecond string:DEFSecond string isDEFget testFirst string:GHIFirst string isGHISecond string: Second string is 程程 序序 说说 明:明: 由由最最后后一一行行的的显显示示结结果果可可知知,由由于于get( )函函数数没没有有读读出出上上一一个个字字符符串串中中的的n字字符符,所所以以在在第第二二次次处处理理时时,没没等等输输入入字字符符就就显显示示了了空空串串,这这样样若若在在wh

18、ile语语句句中中处处理理时时,将将会会陷陷入入死死循循环环中中,实实际际使使用用时时应应引起注意。引起注意。3.2 文件文件 ifstream: 文件输入用流类文件输入用流类ofstream: 文件输出用流类文件输出用流类fstream: 文件输入输出用流类文件输入输出用流类 与文件有关的流类有如下几个:与文件有关的流类有如下几个:上述类是在上述类是在fstream.h中定义的,因此在程序中定义的,因此在程序首部需利用首部需利用#include#include指令包含进指令包含进fstream.h头头文件。文件。3.2.1 文件的打开和关闭文件的打开和关闭打开文件时一般使用成员函数打开文件时

19、一般使用成员函数open( ),关闭文件时使用成员函数关闭文件时使用成员函数close( )。 输入用输入用的的open成员函数的格式如下:成员函数的格式如下: void open(const char *fname, int openmode=ios:in, int prot=filebut:openprot); 输出用的输出用的open成员函数的格式如下:成员函数的格式如下: void open(const char *fname, int openmode=ios:out, int prot=filebut:openprot); fname:指向文件名的指针;指向文件名的指针; open

20、mode:打开模式;打开模式; prot:打开文件的保护种类打开文件的保护种类(一般采用缺省值一般采用缺省值)。 其中:其中: openmode对于输入和输出是不同的,下面分对于输入和输出是不同的,下面分别进行简单的介绍。别进行简单的介绍。输入用输入用openmode的的定义定义ios:in 以输入方式打开文件(ifstream缺省的值),当文件不存在时,创建一个长度为0的文件。ios:nocreate 如果文件不存在出错,不创建新文件。ios:binary 以二进制方式打开文件(缺省为正文方式)。 输出用输出用openmode的定义的定义 ios:app 以追加方式打开文件 ios:ate

21、打开文件,并将文件指针移入最后 ios:in 即使存在同名文件也不删除 ios:out 以输出方式打开文件(ofstream的缺省值) ios:trunc 如果文件存在,则删除其中的内容 ios:nocreate 如果文件不存在,出错 ios:noreplace 如果文件存在,出错(防止改写) ios:binary 以二进制方式打开文件(缺省为正文方式) 有了上述打开模式之后,就可以采用如有了上述打开模式之后,就可以采用如下两种方法来打开文件(下两种方法来打开文件( ifstream类)方法一:方法一: 先定义输入用对象,然后利用先定义输入用对象,然后利用open( )成员函数来打开文件。成员

22、函数来打开文件。 ifstream fin; /定义输入用对象定义输入用对象fin.open(datafile.txt); /打开打开datafile.txt文件文件例如:例如:open( )函数的后两个参数采用默认值,即打开模式为函数的后两个参数采用默认值,即打开模式为ios:in。方法二:方法二: ifstream fin(“datafile.txt”); 在定义输入用对象的同时打开文件在定义输入用对象的同时打开文件例如:例如:直接调用构造函数来进行打开文件处理的。直接调用构造函数来进行打开文件处理的。文件的打开方式文件的打开方式( (ofstream类) )(1) 利用ofstream类

23、来打开输出用文件 ofstream fout(“OUTPUT”, ios:out);(2) 利用ifstream类来打开输入用文件 ifstream fin(“INPUT”, ios:in);(3) 利用fstream类来打开输入/输出用文件 fstream file(“INOUT”, ios:in|ios:out); 显然,打开方式一项可以通过显然,打开方式一项可以通过“或或”运算符将多项连接起来使用。运算符将多项连接起来使用。3.2.2 文件的输入和输出文件的输入和输出 文件被打开以后,就可以利用成员函数或文件被打开以后,就可以利用成员函数或插入运算符插入运算符来进行数据的输来进行数据的输

24、入和输出操作。入和输出操作。 用于文件操作的成员函数包括用于文件操作的成员函数包括get( )、put( )和和getline( )等,这些函数的用法与标准输入等,这些函数的用法与标准输入/输输出部分基本上是相同的。出部分基本上是相同的。例例 如:如: ifstream fin; ofstream fout; char ch; fin.open(“mydata1.txt”); /打开输入用文件 fout.open(“mydata2.txt”); /打开输出用文件 fin.get(ch); /或 fin ch; fout.put(ch); /或 fout ch; fin.close( ); /关

25、闭输入文件 fout.close( ); /关闭输出文件说明:说明: 在进行文件输入在进行文件输入/输出时,可以利用输出时,可以利用seekp( )或或tellp( )来设置或得到输出流的文件指针,可来设置或得到输出流的文件指针,可以利用以利用seekg( )或或tellg( )来设置或得到当前输入来设置或得到当前输入流的文件指针。流的文件指针。 例如:例如:fout.seekp(100L);fin.seekg(200L);3.2.3 错误处理错误处理 在进行文件操作时,往往会出现一些错误,如在进行文件操作时,往往会出现一些错误,如文件名不存在等,这时就需要在程序中对相应的错文件名不存在等,这

26、时就需要在程序中对相应的错误进行判断和处理。误进行判断和处理。主要错误检查成员函数主要错误检查成员函数 成员函数成员函数 意意 义义 good( ) 状态正常 bad( ) 发生重大输入输出错 fail( ) 发生可以恢复的输入/输出错 eof( ) 文件结束 rdstate( ) 返回错误标志: ios:goodbit 无错 ios:eofbit 到达文件尾部 ios:failbit 发生可以恢复的格式错或变换错 ios:badbit 发生重大错或未知状态例例 如如if(!fin.fail( ) /如果正常(可简写为:如果正常(可简写为:if(fin)) if(fin.good( ) /如果

27、正常如果正常 在文件打开操作结束时,可以采用如下两在文件打开操作结束时,可以采用如下两种方法来判断是否出错种方法来判断是否出错: :方法一:方法一:if(fin.fail( ) /如果出错如果出错(简写为:简写为:if(!fin)) if(!fin.good( ) /如果出错如果出错方法二:方法二:【例例3.6】编一程序,用于将一个文件中的编一程序,用于将一个文件中的内容显示到屏幕上。内容显示到屏幕上。#include #include int main(int argc, char *argv ) char ch; if (argc != 2) cout “Usage: PRn”; retu

28、rn 1; ifstream in(argv1); if(in.fail( ) cout ch; /读入一个字符读入一个字符 cout ch; in.close( ); return 0; 说明:本程序通过命令行参数来获取输入文件名,而当命令行上无文件名参数时,将给出程序用法提示信息。 【例例3.7】编一程序,将一个文件中的数据写入另一个文编一程序,将一个文件中的数据写入另一个文件中,并显示到屏幕上。件中,并显示到屏幕上。#include #include int main( ) ifstream fin; /输入用对象 ofstream fout; /输出用对象 char ch; fin.o

29、pen(“input.txt”); /打开输入文件 if(fin.fail( ) cout “File open error!n”; return 1; fout.open(“output.txt”); if(fout.fail( ) cout “File open error!n”; return 1; while(fin.get(ch) fout.put(ch); /输出到文件中 cout.put(ch); /显示到屏幕上 fin.close( ); fout.close( ); return 0;说明:本程序是一个文件复制程序,其功能 是 将 input.txt文 件 中 的 数 据 复 制 到output.txt文件中,同时将其显示到屏幕上。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号