第14章输入输出与.ppt
《第14章输入输出与.ppt》由会员分享,可在线阅读,更多相关《第14章输入输出与.ppt(126页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、|流与标准库流与标准库|输入输出缓冲输入输出缓冲|基于控制台的基于控制台的I/O|基于文件的基于文件的I/O|基于字符串的基于字符串的I/O 第第14章章 输入输出与文件输入输出与文件流的概念及用途p输入输出是指程序与外部设备交换信息pI/O操作是以对数据类型敏感的方式执行的。C+的I/O操作是以字节流的形式实现的。流实际上就是字节序列。pC+提供了高级I/O功能。高级I/O功能把若干个字节组合成有意义的单位,如整数、浮点数、字符、字符串以及用户自定义类型的数据。pC+提供了无格式I/O和格式化I/O两种操作。无格式I/O传输速度快,但使用起来较为麻烦。格式化I/O按不同的类型对数据进行处理,
2、但需要增加额外的处理时间,不适于处理大容量的数据传输。p在C+中,输入输出不是语言所定义的部分,而是由标准库提供。pC+的输入输出分为:n基于控制台的I/On基于文件的I/On基于字符串的I/O流与标准库:面向对象的输入输出是通过C+的输入/输出类库来实现的头头文件文件类类型型iostream istream从流中从流中读读取取ostream写到流中去写到流中去iostream对对流流进进行行读读写,从写,从istream和和ostream派生派生fstreamifstream从文件中从文件中读读取,由取,由istream派生而来派生而来ofstream写到文件中去,由写到文件中去,由ostr
3、eam派生而来派生而来fstream对对流流进进行行读读写,由写,由iostream派生而来派生而来sstreamistringstream从从string对对象中象中读读取,由取,由istream派生而来派生而来ostringstream写到写到string对对象中去,由象中去,由ostream派生而来派生而来stringstream对对string对对象象进进行行读读写,由写,由iostream派生而来派生而来类的继承关系iosistreamostreamifstreamofstreamiostreamfstreamistringstreamostringstreamstringstrea
4、m|流与标准库流与标准库|输入输出缓冲输入输出缓冲|基于控制台的基于控制台的I/O|基于文件的基于文件的I/O|基于字符串的基于字符串的I/O 第第14章章 输入输出与文件输入输出与文件输入输出缓冲pC+的输入输出是基于缓冲实现的p每个I/O对象管理一个缓冲区,用于存储程序读写的数据。p当用cout和插入运算符“”从输入缓冲区中提取数据送给程序中的有关变量。p总之,流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。|流与标准库流与标准库|输入输出缓冲输入输出缓冲|基于控制台的基于控制台的I/O|基于文件的基于文件的I/O|基于字符串的基于字符串的I/O 第第14章章 输入输出与文件输入输
5、出与文件基于控制台的基于控制台的I/O基于控制台的输入基于控制台的输入/输出的支持主要包含在两个头文件中:输出的支持主要包含在两个头文件中:和和p头文件头文件声明了所有声明了所有I/O操作所需要的基础服务,定义了操作所需要的基础服务,定义了4个个标准的输入输出流对象标准的输入输出流对象ncin是类是类istream的对象,它与标准输入设备的对象,它与标准输入设备(常指键盘常指键盘)连在一起。连在一起。ncout是类是类ostream的对象,它与标准输出设备的对象,它与标准输出设备(常指显示设备常指显示设备)连在一起。连在一起。ncerr是类是类osteam的对象,它与标准错误输出设备连在一起。
6、的对象,它与标准错误输出设备连在一起。nclog是类是类ostream的对象,它与标准错误输出设备连在一起。的对象,它与标准错误输出设备连在一起。pcerr流对象流对象:类类osteam的对象,与标准错误输出设备连在一起。的对象,与标准错误输出设备连在一起。cerr的作用是的作用是向控制台向控制台(显示器显示器)显示出错信息显示出错信息。对象。对象cerr的输出是非的输出是非缓冲输出,也就是说插入到缓冲输出,也就是说插入到cerr中的输出会被立即显示出来,非缓冲中的输出会被立即显示出来,非缓冲输出可迅速把出错信息告诉用户。输出可迅速把出错信息告诉用户。pcerr与标准输出流与标准输出流cout
7、:作用和用法差不多。但有一点不同:作用和用法差不多。但有一点不同:cout流可传送到显示器输出,也可以被重定向输出到磁盘文件,而流可传送到显示器输出,也可以被重定向输出到磁盘文件,而cerr流流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用用cerr。pclog流对象流对象:类类ostream的对象,与标准错误输出设备连在一起。对的对象,与标准错误输出设备连在一起。对象象clog的输出是缓冲输出。即每
8、次插入的输出是缓冲输出。即每次插入clog可能使其输出保持在缓冲可能使其输出保持在缓冲区,要等缓冲区刷新时才输出。区,要等缓冲区刷新时才输出。基于控制台的I/Oa输出流输出流a输入流输入流a格式化输入格式化输入/输出输出输出流(ostream)pC+的类ostream提供了格式化输出和无格式输出的功能p输出功能包括1.用流插入运算符()输出标准类型的数据;2.用成员函数put输出字符;3.成员函数write的无格式化输出;1.输出标准类型的数据输出标准类型的数据p标准类型的数据用流插入运算符输出p格式:cout数据项;pC+能自动判别数据类型,并根据数据类型解释内存单元的信息,把它转换成字符显
9、示在显示器上。输出流#includeusingnamespacestd;intmain()1.inta=5,*p=&a;2.doublex=1234.56;3.charch=a,*pch=“ab”;4.couta=aendl;5.coutx=xendl;6.coutch=chendl;7.cout*p=*pendl;8.coutp=pendl;9.cout*pch=*pchendl;10.coutpch=pchendl;11.return0;a=5x=1234.56ch=a*p=5p=0012FF7C*pch=apch=ab地址的默认输出方地址的默认输出方式:十六进制式:十六进制如果输出的指针
10、变量是一个指向如果输出的指针变量是一个指向字符的指针,字符的指针,C+C+并不输出该指并不输出该指针中保存的地址,而是输出该指针中保存的地址,而是输出该指针指向的字符串针指向的字符串指针输出的特例p如果输出的指针变量是一个指向字符的指针时,C+并不输出该指针中保存的地址,而是输出该指针指向的字符串。p如果确实想输出这个指向字符的指针变量中保存的地址值,可以用强制类型转换,将它转换成void*类型#includeusingnamespacestd;intmain()char*ptr=abcdef;coutptr指向的内容为:ptrendl;coutptr中保存的地址为:(void*)ptrend
11、l;return0;ptrptr指向的内容为指向的内容为:abcdefabcdefptrptr中保存的地址为中保存的地址为:0046C04C0046C04C2.用用成员函数成员函数put输出输出字符字符cout.put(Acout.put(A);将字符将字符A A显示在屏幕上。显示在屏幕上。cout.put(A).put(ncout.put(A).put(n);连续调用连续调用putput函数,在输函数,在输出字符出字符A A后输出一个换行符。圆点运算符后输出一个换行符。圆点运算符(.)(.)从左向右结合,从左向右结合,put put 成员函数返回调用成员函数返回调用putput的对象的引用。
12、的对象的引用。cout.put(65);cout.put(65);用用ASCIIASCII码值表达式调用码值表达式调用putput函数,语函数,语句也输出字符句也输出字符A A。3.成员函数成员函数write的无格式输出的无格式输出调用成员函数write可实现无格式输出。它有两个参数。第一个参数是一个指向字符的指针,第二个参数是一个整型值。这个函数把一定量的字节从字符数组中输出。这些字节都是未经任何格式化的,仅仅是以原始数据形式输出。例如:charbuffer=“HAPPYBIRTHDAY”;cout.write(buffer,10);输出buffer的10个字节函数调用:cout.write
13、(“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,10);显示了字母表中的前10个字母。基于控制台的I/Oa输出流输出流()输入标准类型的数据)输入标准类型的数据;2.用成员函数用成员函数get和和getline输入字符输入字符;3.成员函数成员函数read的无格式输入的无格式输入;1.流提取运算符流提取运算符流的输入最常用的是流提取运算符。流提取运算符通常会跳过输人流中的空格、tab键、换行符等空白字符。当遇到输入流中的文件结束符(eof/CtrlZ)时,流提取运算符返回0(false);否则,流提取运算符返回对调用该运算符的对象的引用。可以利用这个特性可以利用这个特性来控制输入的
14、循环来控制输入的循环实例统计某次考试的最高成绩。假定事先不知道有多少个考试成绩。(while循环实现)解决方法一:选择一个特殊的输入标记(-1)表示输入结束int main()int value,total,max,min,noOfInput;total=0;max=0;min=100;noOfInput=0;cout value;while(value!=-1)+noOfInput;total+=value;if(value max)max=value;if(value min)min=value;cout n请输入第请输入第 noOfInput+1 value;return 0;解决方法二
15、:利用流提取运算符的返回值,避免输入标记选择的问题。即用户可以输入表示成绩输入结束的文件结束符,程序将输出这批成绩中的最高分。#includeusingnamespacestd;intmain()intgrade,highestGrade=-1;coutgrade)if(gradehighestGrade)highestGrade=grade;coutEntergrade(enterend-of-filetoend):;coutnnHighestgradeis:highestGradegrade)将变为0(即false)。输出结果:输出结果:Entergrade(enterend-of-fil
16、etoend):67Entergrade(enterend-of-filetoend):87Entergrade(enterendoffiletoend):73Entergrade(enterend-of-filetoend):95Entergrade(enterend-of-filetoend):34Entergrade(enterend-of-filetoend):99Entergrade(enterend-of-filetoend):zHeighestgradeis:992.1 成员函数成员函数getpget函数用于读入字符或字符串pget函数有三种格式:n不带参数n带一个参数n带三个参
17、数不带参数的get函数不带参数的get函数从当前对象读入一个字符,包括空白字符以及表示文件结束的EOF,并将读入值作为函数的返回值返回。如下列语句while(ch=cin.get()!=EOF)coutch1;则字符变量ch1中保存的是“.”。#includeusingnamespacestd;intmain()constintSIZE=80;charbuffer1SIZE,buffer2SIZE;coutbuffer1;coutnThestringreadwithcinwas:nbuffer1n;cin.get(buffer2,SIZE);coutThestringreadwithcin.g
18、etwas:nbuffer2endl;return0;Contrasting(空格)(空格)stringinputwithcinandcin.get2.2 成员函数成员函数getline 与带三个参数的与带三个参数的getget函数类似,函数类似,getlinegetline函数也带函数也带3 3个参数(个参数(字符数组、数组规模和结束符字符数组、数组规模和结束符),它读取),它读取一行信息一行信息到字符数组中,然后插入一个空字符。到字符数组中,然后插入一个空字符。不同的是,不同的是,getlinegetline要去除输入流中的结束符要去除输入流中的结束符(即即读取字符并删除它读取字符并删除它
19、,默认值是默认值是nn),但是不把它,但是不把它存放在字符数组中。存放在字符数组中。#includeusingnamespacestd;intmain()constSIZE=80;charbufferSIZE;coutEnterasentence:n;cin.getline(buffer,SIZE);coutThesentenceenteredis:nbufferendl;return0;输出:Usingthegetlinememberfunction.输入:Usingthegetlinememberfunction.#includeusingnamespacestd;intmain()con
20、stSIZE=80;charbufferSIZE;coutEnterasentence:n;cin.getline(buffer,SIZE,.);coutThesentenceenteredis:nbufferendl;return0;输入:Usingthegetlinememberfunction.Usingthegetlinememberfunctionintmain()constSIZE=80;charbufferSIZE,ch;coutEnterasentence:n;cin.getline(buffer,SIZE,.);cin.get(ch);coutbufferchendl;ret
21、urn0;intmain()constSIZE=80;charbufferSIZE,ch;coutEnterasentence:n;cin.get(buffer,SIZE,.);cin.get(ch);coutbufferchendl;return0;输出:输出:IamstudentH输出:输出:Iamstudent.三个参数的get函数和getline函数的区别输入:Iamstudent.Heisateacher.对结束标记符的处理不一样。对结束标记符的处理不一样。Get()之后,保留在缓冲区;()之后,保留在缓冲区;Getline()之后不保留()之后不保留对结束标记符的处理不一样。对结束
22、标记符的处理不一样。get()之后,保留在缓冲区;()之后,保留在缓冲区;getline()之后不保留()之后不保留3.read函数的无格式输入函数的无格式输入 与与gcount函数函数p调用成员函数read(char*,int)可实现无格式输入。它有两个参数。第一个参数是一个指向字符的指针,第二个参数是一个整型值。这个函数把一定量的字节从输入缓冲区读入字符数组,不管这些字节包含的是什么内容。例如:charbuffer80;cin.read(buffer,10);读入10个字节,放入bufferp如果还没有读到指定的字符数,遇到了EOF,则读操作结结束。此时可以用成员函数gcount统计输入的
23、字符个数使用成员函数write,read,gcount进行无格式输入输出举例intmain()charbuffer80;coutEnterasentence:n;cin.read(buffer,20);coutnThesentenceenteredwas:n;cout.write(buffer,cin.gcount();coutendl;cout一共输入了cin.gcount()个字符n;return0;输入:输入:Usingtheread,write,andgcountmemberfunctions成员函数gcount返回最近一次输入操作所读取的字符数Thesentenceenteredwa
24、s:Usingtheread,writ一共输入了一共输入了20个字符个字符基于控制台的I/Oa输出流输出流(,cin,get(),cin.getline(),cin.read()a格式化输入格式化输入/输出输出格式化输入/输出pC+提供了大量的用于执行格式化输入/输出的流操纵算子和成员函数。p功能:整数流的基数:dec、oct、hex和setbase设置浮点数精度:precision、setprecision控制浮点数的输出:scientific、fixed尾数和小数点:showpoint、fixed设置域宽:setw、width设置域填充字符:fill、setfill对齐:left、righ
25、t、internal一、设置整型数的基数p输入输出流中的整型数默认为十进制表示p可以插入hex操纵符将基数设为十六进制p插入oct操纵符将基数设为八进制p插入dec操纵符将基数重新设为十进制p也可以通过流操纵符setbase(int)来改变流的基数。该操纵符有一个整型参数,它的值可以是16,10或8,表示将整型数的基数设为十六进制,十进制或八进制。p流的基数值只有被显式更改时才会变化,否则一直沿用原有的基数。(粘性设置)p使用任何带参数的流操纵符,都必须包含头文件iomanip。hexhex、octoct、decdec和和setbasesetbase()的用法示例()的用法示例#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 输入输出
限制150内