C程序设计输入输出实用教案

上传人:莉**** 文档编号:73082384 上传时间:2022-04-10 格式:PPT 页数:35 大小:684.50KB
收藏 版权申诉 举报 下载
C程序设计输入输出实用教案_第1页
第1页 / 共35页
C程序设计输入输出实用教案_第2页
第2页 / 共35页
C程序设计输入输出实用教案_第3页
第3页 / 共35页
资源描述:

《C程序设计输入输出实用教案》由会员分享,可在线阅读,更多相关《C程序设计输入输出实用教案(35页珍藏版)》请在装配图网上搜索。

1、输入(shr)/输出(I/O)概述 输入/输出(简称I/O)是程序的一个重要组成部分: 程序运行所需要的数据往往要从外设(如:键盘、文件等)得到 程序的运行结果通常也要输出到外设(如:显示器、打印机、文件等)中去。 在C+中,输入/输出不是(b shi)语言定义的成分,而是由具体的实现(编译程序)作为标准库的功能来提供。 第1页/共34页第一页,共35页。C+的I/O流 在C+中,输入/输出操作是一种(y zhn)基于字节流的操作: 在进行输入操作时,可把输入的数据看成逐个字节地从外设流入到计算机内部(内存); 在进行输出操作时,则把输出的数据看成逐个字节地从内存流出到外设。 在C+的标准库中

2、,除了提供基于字节的输入/输出操作外,为了方便使用,还提供了基于C+基本数据类型数据的输入/输出操作。 在C+程序中也可以对类库中输入/输出类的一些操作进行重载,使其能对自定义类的对象进行输入/输出操作。 第2页/共34页第二页,共35页。I/O的分类(fn li) 基于(jy)控制台的I/O: 从标准输入设备(如:键盘)获得数据 把程序结果从标准输出设备(如:显示器)输出 基于(jy)文件的I/O: 从外存文件获得数据 把程序结果保存到外存文件中 基于(jy)字符串变量的I/O: 从程序中的字符串变量中获得数据 把程序结果保存到字符串变量中第3页/共34页第三页,共35页。C+输入输出的实现

3、(shxin)途径 过程式通过从C语言保留下来的函数(hnsh)库中的输入/输出函数(hnsh)来实现。 面向对象通过C+的I/O类库中的I/O类来实现。第4页/共34页第四页,共35页。面向对象的输入(shr)/输出 C+的I/O类库提供了以面向对象方式进行输入/输出。以下(yxi)是I/O类库中基本的I/O类:ios istream(控制台输入) ostream(控制台输出) ifstream(文件输入) istrstream(字符串变量输入) ofstream(文件输出) ostrstream(字符串变量输出) iostream(输入/输出) fstream(文件输入/输出) strst

4、ream(字符串变量 输入/输出) 第5页/共34页第五页,共35页。 在进行输入/输出时,首先创建一个I/O类的对象,然后,通过该对象(调用对象类的成员函数)进行输入/输出操作。 istream类重载了操作符“”(抽取),用它可以(ky)进行基本类型数据的输入操作。例如: istream in(.); in x; /x是一个变量 in y; /y是一个变量 或 in x y; ostream类重载了操作符“”(插入),用它可以(ky)进行基本数据类型数据的输出操作。例如: ostream out(.); out e1; /e1是一个表达式 out e2; /e2是一个表达式 或 out e1

5、 e2;第6页/共34页第六页,共35页。控制台I/O 在I/O类库中预定(ydng)义了四个I/O对象:cin、cout、cerr以及clog,可以直接利用这些对象进行控制台的输入/输出操作: cin属于istream类的对象,它对应着计算机系统的标准输入设备;cout属于ostream类的对象,它对应着计算机系统的用于输出程序正常运行结果的标准输出设备;cerr和clog属于ostream类的对象,它们对应着计算机系统的用于输出程序错误信息的设备,通常情况下它们都对应着显示器;在进行控制台输入/输出时,程序中需要有下面的包含命令: #include 第7页/共34页第七页,共35页。控制台

6、输出(shch)#include using namespace std;.int x;float f;char ch;int *p=&x;.cout x ; /输出(shch)x的值。cout f; /输出(shch)f的值。cout ch; /输出(shch)ch的值。cout hello; /输出(shch)字符串hello。cout p; /输出(shch)变量p的值,即,变量x的地址。或cout x f ch hello p;第8页/共34页第八页,共35页。输出格式(g shi)控制 为了对输出格式进行进一步的控制,可以(ky)通过输出一些操纵符(manipulator)来实现,例

7、如: #include #include /操纵符声明的头文件。 using namespace std; . int x=10; cout hex x endl; /以十六进制输出x的值,然后换行。第9页/共34页第九页,共35页。操纵符含义endlendl输出换行符,并执行flushflush操作flushflush使输出缓存中的内容立即输出decdec十进制输出octoct八进制输出hexhex十六进制输出setprecision(int n)setprecision(int n)设置浮点数有效数字的个数或小数点后数字的位数 设置/取消输出格式,flags的取值可以是:ios:scien

8、tific(以指数形式显示浮点数),ios:fixed(以小数形式显示浮点数),等等第10页/共34页第十页,共35页。 对于浮点数(float、double和long double): 当输出格式为ios:scientific或ios:fixed时,操纵符setprecision用于设置浮点数(float和double)小数点后面的位数; 当输出格式既不为ios:scientific也不为ios:fixed,或两者都有时,操纵符setprecision用于设置浮点数有效数字的个数,这时的输出格式根据(gnj)有效数字自动确定。 第11页/共34页第十一页,共35页。 除了通过插入操作符进行输

9、出外,也可以用ostream类提供(tgng)的一些基于字节流的操作来进行输出,例如: /输出一个字符。 ostream& ostream:put(char ch); /输出p所指向的内存空间中count个字节。 ostream& ostream:write(const char *p,int count); 第12页/共34页第十二页,共35页。控制台输入(shr)#include using namespace std;.int x;double y;char str10;cin x; cin y; cin str;或者cin x y str;在输入时,各个数据(shj)之间用空白符分开。

10、 第13页/共34页第十三页,共35页。 可以通过一些操纵符来控制输入的行为(xngwi),例如: cin setw(10) str; /把输入的前9个字符和一个0放入str中。 除了抽取操作符“”外,还可以使用istream类的基于字节流的成员函数来进行输入,例如: /输入一个字符。 istream:get(char &ch); /输入一个字符串直到输入了count-1个字符或遇到 /delim指定的字符为止,并自动加上一个0字符。 istream:getline(char *p, int count, char delim=n); /读入count个字符至p所指向的内存空间中。 istre

11、am:read(char *p,int count);第14页/共34页第十四页,共35页。输入/输出(shch)操作符“”和“”和插入操作符“”对自定义类的对象进行输入/输出操作,就需要(xyo)针对自定义的类重载插入操作符“”。 对自定义的类重载插入操作符“”时,须作为全局函数来重载。第15页/共34页第十五页,共35页。插入(ch r)操作符“”的重载 class Aint x,y;public:.friend ostream& operator (ostream& out, const A &a);;ostream& operator (ostream& out, const A &a

12、) out a.x , a.y;return out;.A a,b;cout a endl b;第16页/共34页第十六页,共35页。派生类输出(shch)操作符“”的重载class Aint x,y;public:.virtual void display(ostream& out) constout x , y ; ;class B: public Adouble z;public:.void display(ostream& out) constA:display(out);out , z ; ;ostream& operator (ostream& out, const A& a) a

13、.display(out); /动态(dngti)绑定到A类或B类对象的display。return out;第17页/共34页第十七页,共35页。文件(wnjin)I/O 程序运行结果( ji gu)有时需要永久性地保存起来,以供其它程序或本程序下一次运行时使用。程序运行所需要的数据也常常要从其它程序或本程序上一次运行所保存的数据中获得。 用于永久性保存数据的设备称为外部存储器(简称:外存),如:磁盘、磁带、光盘等。 在外存中保存数据的方式通常有两种:文件和数据库。本课程只介绍以文件方式来永久性地保存数据。第18页/共34页第十八页,共35页。文件(wnjin)的基本概念 在C+中,把文件看

14、成是由一系列字节所构成的字节串,称为流式文件,对文件中数据的操作(输入/输出)通常是逐个字节顺序进行。 在对文件数据进行读写的过程: 打开文件。目的是:在程序内部的一个表示文件的变量/对象与外部的一个具体文件之间建立联系。 文件读/写 关闭文件。目的是把暂存在内存缓冲区中的内容写入到文件中,并归还打开文件时申请(shnqng)的内存资源。 第19页/共34页第十九页,共35页。 每个打开的文件都有一个(y )内部的位置指针,它指出文件的当前读写位置。 进行读/写操作时,每读入/写出一个(y )字节,文件位置指针会自动往后移动一个(y )字节的位置。 位置(wi zhi)指针 第20页/共34页

15、第二十页,共35页。文件数据(shj)的存储方式 文本方式(text) 只包含可显示字符和有限的几个控制字符(如:r、n、t等); 一般用于存储(cn ch)具有“行”结构的文本数据; 文本方式存储(cn ch)整数1234567 : 依次把1、2、3、4、5、6、7的ASCII码(共7个字节)写入文件。 二进制方式(binary) 可以包含任意的二进制字节; 一般用于存储(cn ch)无显式结构的数据; 二进制方式存储(cn ch)整数1234567 : 把整数1234567的计算机内部表示(假设为32位计算机):0012D687(十六进制,4个字节:00 12 D6 87)写入文件。 第2

16、1页/共34页第二十一页,共35页。文件(wnjin)输出 在利用I/O类库中的类进行外部文件的输入/输出时,程序中需要下面的包含命令: #include #include 对于文件输出:创建(chungjin)一个ofstream类(是ostream类的派生类)的对象。建立ofstream类的对象与外部文件之间的联系。第22页/共34页第二十二页,共35页。建立ofstream类的对象与外部文件联系(linx)的方式 直接方式:在创建ofstream类的对象时指出外部文件(wnjin)名和打开方式。例如: ofstream out_file(,); 间接方式是在创建了ofstream类的对象

17、之后,调用ofstream的一个成员函数open来指出与外部文件(wnjin)的联系。例如: ofstream out_file; out_file.open(,); 第23页/共34页第二十三页,共35页。文件(wnjin)输出打开方式 打开方式: ios:out,含义是打开一个外部文件用于写操作,如果外部文件已存在,则首先把它的内容清除;否则,先创建该外部文件。 ios:app,含义是打开一个外部文件用于添加(从文件末尾)操作。如果外部文件不存在,则先创建该外部文件。 上面(shng min)的值与ios:binary按位或(|)操作的结果,它表示按二进制方式打开文件。默认的打开方式是文本

18、方式。 对以文本方式打开的文件,当输出的字符为n时,在某些平台上(如:DOS和Windows平台)将自动转换成r和n两个字符写入外部文件。 第24页/共34页第二十四页,共35页。打开文件时,必须要对文件打开操作的成功与否进行判断。判断文件是否成功打开可以采用以下方式(fngsh) if (!out_file) /或:out_file.fail() /或:!out_file.is_open() . /失败处理 第25页/共34页第二十五页,共35页。 文件成功打开后,可以使用(shyng)插入操作符“”或ofstream类的一些成员函数来进行文件输出操作,例如: ofstream out_fi

19、le(d:myfile.dat,ios:out); if (!out_file) exit(-1); int x; double y; . out_file x , y endl; out_file.put(A); out_file.write(ABCDEFG,7); 文件输出操作结束时,要使用(shyng)ofstream的一个成员函数close关闭文件: out_file.close(); 第26页/共34页第二十六页,共35页。文件(wnjin)输入首先创建一个ifstream类(istream类的派生类)的对象,并与外部文件建立联系。例如:ifstream in_file(,); 或i

20、fstream in_file;in_file.open(,); 打开方式:ios:in,它的含义(hny)与fopen的打开方式“r”相同也可以把它与ios:binary通过按位或(|)操作实现二进制打开方式。默认为文本方式。对以文本方式打开的文件,当文件中的字符为连续的r和n时,在某些平台上(如:DOS和Windows平台)将自动转换成一个字符n输入。第27页/共34页第二十七页,共35页。 判断打开成功的方式与输出文件对象相同。 文件成功打开后,可以使用抽取操作符“”或ifstream类的一些成员函数来进行(jnxng)文件输出操作,例如: ifstream in_file(d:myfi

21、le.dat,ios:in); if (!in_file) exit(-1); char ch,buf11; int x; double y; . in_file x ch y; in_file.get(ch); in_file.read(buf,7); buf7 = 0;第28页/共34页第二十八页,共35页。 判断文件是否结束( jish)可以调用ios类的成员函数eof来实现: int ios:eof(); 该函数返回0表示文件未结束( jish);返回非0表示文件结束( jish)。 文件输出操作结束( jish)时,要使用ifstream的一个成员函数close关闭文件: in_fi

22、le.close(); 注意:从文件输入必须要知道文件中数据的存储格式!第29页/共34页第二十九页,共35页。文件输入(shr)/输出 如果需要打开一个既能读入数据、也能输出数据的文件,则需要创建一个fstream类的对象(类fstream是类iostream的派生类)。 在创建fstream类的对象并建立与外部文件的联系时,文件打开方式应为:ios:in|ios:out(可在文件任意位置写)或ios:in|ios:app(只能(zh nn)在文件末尾写) 第30页/共34页第三十页,共35页。随机存取文件(wnjin) 为了能够(nnggu)随机读写文件中的数据,必须要显示地指出读写的位置

23、。 对于以输入方式打开的文件,可用下面的操作来指定文件内部指针位置: istream& istream:seekg();/指定绝对位置 istream& istream:seekg(,); /指定相对位置 streampos istream:tellg(); /获得指针位置 对于输出文件,可用下面的操作来指定文件内部指针位置: ostream& ostream:seekp();/指定绝对位置 ostream& ostream:seekp(,); /指定相对位置 streampos ostream:tellp(); /获得指针位置 可以是:ios:beg(文件头),ios:cur(当前位置)和i

24、os:end(文件尾)。第31页/共34页第三十一页,共35页。字符串I/O 程序中的有些数据并不直接输出到标准输出设备或文件,而是需要保存在程序中的某个(mu )字符串变量中。 第32页/共34页第三十二页,共35页。 首先需要创建类istrstream、ostrstream或strstream的一个对象(duxing)对于ostrstream类 : char buf100; ostrstream str_buf; 或 ostrstream str_buf(buf,100);对于istrstream类 char buf100; . /通过某种途径在buf中存放了一些字符。 istrstrea

25、m str_buf(buf); 或 istrstream str_buf(buf,100); 然后可以用与控制台和文件输入/输出类似的操作进行基于字符串变量的输入/输出。第33页/共34页第三十三页,共35页。感谢您的欣赏(xnshng)!第34页/共34页第三十四页,共35页。NoImage内容(nirng)总结输入/输出(I/O)概述。程序的运行(ynxng)结果通常也要输出到外设(如:显示器、打印机、文件等)中去。对于浮点数(float、double和long double):。int x,y。double z。程序运行(ynxng)结果有时需要永久性地保存起来,以供其它程序或本程序下一次运行(ynxng)时使用。out_file.write(ABCDEFG,7)。istrstream str_buf(buf)。感谢您的欣赏第三十五页,共35页。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!