




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 数据的输入和输出C+语言使用的输入/输出功能:(2)C+语言中特有的功能需要包含“iostream.h”文件(1)C语言中的函数:如scanf( )、printf( )等 需要包含“stdio.h”文件 “流”(1)“文本流”:文本流是一个字符序列。 (2)“二进制流”:二进制流是一组字节序列。 “流”的类型 “文 件”本章只介绍C+语言中特有的通过流类来进行标准输入输出以及文件的处理过程。“文件”是一个逻辑的概念,它可用于从磁盘文件到终端的任何东西。通过打开操作,便可将一个“流”同一个特定的文件联系起来,文件打开以后,程序就可以同文件交换数据了,而通过关闭操作,则可将文件与特定的“流
2、”之间的联系断开。3.1 标准输入和输出 istream: 输入用流类ostream: 输出用流类iostream: 输入输出用流类 上面三个流类都是在iostream.h头文件中定义的,因此,在用上述三个流类进行输入输出时,需要在程序的首部包含进iostream.h头文件。标准输入/输出的三个流类:3.1.1 基于运算符的输入输出1. 运算符的基本功能cin: 标准输入流cout: 标准输出流cerr: 非缓冲型的标准出错流clog: 缓冲型的标准出错流 通过这两个流类对象及插入运算符来进行标准输入输出。 当在程序的首部使用#include 语句时,系统将自动产生如下4个流类对象:【例3.1
3、】编一程序,利用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 “n”; cout ss; cout “String is ” ss 和和进行数据的输入和输出。 输入与执行结果:Input String,int,long,double:Language1010003.14S=Language A=10 B=1000 C=3.
4、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 来进行连续输入时,只要根据所需要输入的数据类型(由变量的类型来判断),由键盘连续输入即可,每输入完一个数据需要按一下回车。(2)在利用插入运算符来连续显示数据时,系统会自动根据相应变量的数据类型来显示数据。2. 格式化输出(1)域宽的指定width( )注:每次输出完成后所设域宽都被清除 利用cout对象的width( )成员函数可以设定输出域宽。cout
5、.width(10);cout x;用法如下:说 明: 为了明确地清除所设置的域宽,可以利用下面的语句: cout.width(0); 此函数执行了以后,输出时的宽度就采用缺省值,也就是按照实际所需要的宽度来进行显示。(2)填充文字的指定fill( )若所显示的数据宽度小于由width( )成员函数所指定的域宽,则前面空的位置将由空格来填充。如果不想用空格来填充,就可以使用fill( )成员函数来设置要填充的文字。 cout.fill(#);fill( )函数的用法如下:表示不足的位置由#填充举例 cout.width(10); cout.fill($); cout “abcde”; cout
6、 n; cout.width(5); cout.fill(#); cout 123; 输出结果如下: $abcde #123 cout.width(10); cout.fill($); cout “abcden”; cout.width(5); cout.fill(#); cout 123;则其输出结果如下: $abcde #123程序段改为如右这样:(3)精度的指定precision( ) 在输出浮点数时,可以利用cout对象的precision( )成员函数来指定所要输出的浮点数的位数(包括整数部分的位数和小数部分的位数,但不包含小数点)。 举例 cout.width(12); cout.
7、precision(7); cout 1234.56789 n; cout.width(12); cout.precision(5); cout 1234.56789 n;输出结果: uuuu1234.568 uuuuuu1234.6最后一位数字是进行四舍五入运算之后显示出来的。(4)输出的刷新flush( )flush( )成员函数用于刷新输出缓冲区。例如:#includeint main(void) char ch; do cout ch; while(ch=Y | ch=y); 程序解释: 由于每个流(输入/输出)都有自己的缓冲区,因此,如果在执行cin ch; 操作之前,cout缓冲区
8、没有被刷新的话,此时,字符串“继续(Y/N): ”就有可能显示不出来,为了保证cout缓冲区中的数据能够显示出来,就需要调用cout对象的flush( )成员函数。 cout ch;cin.tie(&cout);如:或: 3. 控制符处理 在数据的输入输出过程中,如果需要指定数据的格式,可以使用C+语言中提供的控制符。【例3.3】编一程序,用于说明控制符的使用方法。 #include void main( ) int dt = 255; cout dec dt n; cout hex dt hex x;表示所输入的是十六进制数。(2)要想使用控制符,就必须在程序的首部包含进iostream.h
9、头文件。(3)控制符endl的作用同n是相同的。3.1.2 字符的输入和输出get( )和put( ) 在C+语言中,可以不使用运算符,通过使用成员函数来进行数据输入输出。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)每输入一个字符按一下回车,最后结束时
10、按ctrl+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:如果遇到此字符,输入结束其中:注意事项 对于字符串输入来讲,get( )和getline( ) 函数的功能基本相同,但get( )函数并不读入由delim标识的区分字符,而ge
11、tline( )函数读入由delim标识的区分字符。【例3.5】编一程序,利用get( )和getline( )成员函数来输入数据,并比较其差异。#include void main( ) char ss80; cout“getline testn”; cout“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 strin
12、g:”; cin.get(ss,80); cout“First string is“ss” n”; cout“Second string:”; cin.get(ss,80); cout“Second string is“ss”n”; 程序的执行结果如下:getline testFirst string:ABCFirst string isABCSecond string:DEFSecond string isDEFget testFirst string:GHIFirst string isGHISecond string: Second string is 程 序 说 明: 由最后一行的显示
13、结果可知,由于get( )函数没有读出上一个字符串中的n字符,所以在第二次处理时,没等输入字符就显示了空串,这样若在while语句中处理时,将会陷入死循环中,实际使用时应引起注意。3.2 文件 ifstream: 文件输入用流类ofstream: 文件输出用流类fstream: 文件输入输出用流类 与文件有关的流类有如下几个:上述类是在fstream.h中定义的,因此在程序首部需利用#include指令包含进fstream.h头文件。3.2.1 文件的打开和关闭打开文件时一般使用成员函数open( ),关闭文件时使用成员函数close( )。 输入用的open成员函数的格式如下: void o
14、pen(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:指向文件名的指针; openmode:打开模式; prot:打开文件的保护种类(一般采用缺省值)。 其中: openmode对于输入和输出是不同的,下面分别进行简单的介绍。输入用openmode的定义ios:in 以输入方式打开文件(ifstrea
15、m缺省的值),当文件不存在时,创建一个长度为0的文件。ios:nocreate 如果文件不存在出错,不创建新文件。ios:binary 以二进制方式打开文件(缺省为正文方式)。 输出用openmode的定义 ios:app 以追加方式打开文件 ios:ate 打开文件,并将文件指针移入最后 ios:in 即使存在同名文件也不删除 ios:out 以输出方式打开文件(ofstream的缺省值) ios:trunc 如果文件存在,则删除其中的内容 ios:nocreate 如果文件不存在,出错 ios:noreplace 如果文件存在,出错(防止改写) ios:binary 以二进制方式打开文件(
16、缺省为正文方式) 有了上述打开模式之后,就可以采用如下两种方法来打开文件( ifstream类)方法一: 先定义输入用对象,然后利用open( )成员函数来打开文件。 ifstream fin; /定义输入用对象fin.open(datafile.txt); /打开datafile.txt文件例如:open( )函数的后两个参数采用默认值,即打开模式为ios:in。方法二: ifstream fin(“datafile.txt”); 在定义输入用对象的同时打开文件例如:直接调用构造函数来进行打开文件处理的。文件的打开方式(ofstream类)(1) 利用ofstream类来打开输出用文件 of
17、stream fout(“OUTPUT”, ios:out);(2) 利用ifstream类来打开输入用文件 ifstream fin(“INPUT”, ios:in);(3) 利用fstream类来打开输入/输出用文件 fstream file(“INOUT”, ios:in|ios:out); 显然,打开方式一项可以通过“或”运算符将多项连接起来使用。3.2.2 文件的输入和输出 文件被打开以后,就可以利用成员函数或插入运算符来进行数据的输入和输出操作。 用于文件操作的成员函数包括get( )、put( )和getline( )等,这些函数的用法与标准输入/输出部分基本上是相同的。例 如:
18、 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( ); /关闭输入文件 fout.close( ); /关闭输出文件说明: 在进行文件输入/输出时,可以利用seekp( )或tellp( )来设置或得到输出流的文件指针,可以利用seekg( )或tellg( )来设置或得到当前输入流的文件指针。 例如:fout
19、.seekp(100L);fin.seekg(200L);3.2.3 错误处理 在进行文件操作时,往往会出现一些错误,如文件名不存在等,这时就需要在程序中对相应的错误进行判断和处理。主要错误检查成员函数 成员函数 意 义 good( ) 状态正常 bad( ) 发生重大输入输出错 fail( ) 发生可以恢复的输入/输出错 eof( ) 文件结束 rdstate( ) 返回错误标志: ios:goodbit 无错 ios:eofbit 到达文件尾部 ios:failbit 发生可以恢复的格式错或变换错 ios:badbit 发生重大错或未知状态例 如if(!fin.fail( ) /如果正常(可简写为:if(fin)) if(fin.good( ) /如果正常 在文件打开操作结束时,可以采用如下两种方法来判断是否出错:方法一:if(fin.fail( ) /如果出错(简写为:if(!fin)) if(!fin.good( ) /如果出错方法二:【例3.6】编一程序,用于将一个文件中的内容显示到屏幕上。#include #include int ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 便捷复习的计算机二级C++试题及答案
- 计算机二级MySQL教育模式与发展路径试题及答案
- 2025年MySQL错误排查方法试题及答案
- 财务成本管理与社会经济发展试题及答案
- MySQL存储过程设计思路试题及答案
- 2025年计算机基础知识新模式试题及答案
- 必考的计算机二级C++考试试题及答案
- Delphi语言特性考点试题及答案
- 计算机二级Delphi代码实例试题与答案
- Delphi领域应用前景探讨试题及答案
- 舜宇校招面试题目及答案
- 2025年纺羊绒纱项目可行性研究报告
- 中国重症患者肠外营养治疗临床实践专家共识(2024)解读
- 【MOOC答案】《大学篮球(四)》(华中科技大学)章节作业期末慕课答案
- 2025年FRM金融风险管理师考试专业试卷(真题)预测与解析
- 2026届新高考地理精准复习:海气相互作用
- 吉林省长春市2025届高三质量监测(四)英语试卷+答案
- 图像分割与目标检测结合的医学影像分析框架-洞察阐释
- 2024年新疆泽普县事业单位公开招聘村务工作者笔试题带答案
- 《网络素养教育》课件
- 2025年大数据分析师职业技能测试卷:数据采集与处理流程试题解析
评论
0/150
提交评论