第19章输入输出流.ppt
《第19章输入输出流.ppt》由会员分享,可在线阅读,更多相关《第19章输入输出流.ppt(50页珍藏版)》请在三一办公上搜索。
1、第19章 I/O流,19.1 概述19.2 标准流类 19.3 标准输入输出流19.3 文件操作与文件流19.4 字符串流19.5 输入输出重载,在C语言中,用printf和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。在C+的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。因此C+的I/O操作是类型安全(type safe)的。C+的I/O操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。C+对标准类型的数据和对用户声明类型数据的输入输出,采用同样的方法处理。C+通过I/O类库来实现丰富的I/O功能
2、。C+的输入输出优于C语言中的printf和scanf,但是比较复杂,要掌握许多细节。,19.1 C+的输入和输出,在C+中,输入输出流被定义为类。C+的I/O库中的类称为流类(stream class)。用流类定义的对象称为流对象。cout和cin并不是C+语言中提供的语句,它们是iostream类的对象,在未学习类和对象时,在不致引起误解的前提下,为叙述方便,把它们称为cout语句和cin语句。在学习了类和对象后,我们对C+的输入输出应当有更深刻的认识。,1.iostream类库中有关的类C+编译系统提供了用于输入输出的iostream类库。iostream这个单词是由3个部分组成的,即i
3、-o-stream,意为输入输出流。在iostream类库中包含许多用于输入输出的类。ios是抽象基类,由它派生出istream类和ostream类,两个类名中第1个字母i和o分别代表输入(input)和输出(output)。istream类支持输入操作,ostream类支持输出操作,iostream类支持输入输出操作。iostream类是从istream类和ostream类通过多重继承而派生的类。,C+对文件的输入输出需要用ifstream和ofstream类,两个类名中第1个字母i和o分别代表输入和输出,第2个字母f代表文件(file)。ifstream支持对文件的输入操作,ofstrea
4、m支持对文件的输出操作。类ifstream继承了类istream,类ofstream继承了类ostream,类fstream继承了类iostream。,2.与iostream类库有关的头文件iostream类库中不同的类的声明被放在不同的头文件中,用户在自己的程序中用#include命令包含了有关的头文件就相当于在本程序中声明了所需要用到的类。可以换一种说法:头文件是程序与类库的接口,iostream类库的接口分别由不同的头文件来实现。常用的有iostream包含了对输入输出流进行操作所需的基本信息。fstream用于用户管理的文件的I/O操作。strstream用于字符串流I/O。stdio
5、stream用于混合使用C和C+的I/O机制时。iomanip在使用格式化I/O时应包含此头文件。,cerr和clog作用相似,均为向输出设备(显示器)输出出错信息。因此用键盘输入时用cin流,向显示器输出时用cout流。向显示器输出出错信息时用cerr和clog流。在iostream头文件中定义以上4个流对象用以下的形式(以cout为例):ostream cout(stdout);在定义cout为ostream流类对象时,把标准输出设备stdout作为参数,这样它就与标准输出设备(显示器)联系起来,,4.在iostream头文件中重载运算符“”本来在C+中是被定义为左位移运算符和右位移运算符
6、的,由于在iostream头文件中对它们进行了重载,使它们能用作标准类型数据的输入和输出运算符。所以,在用它们的程序中必须用#include命令把iostream包含到程序中。#include 在istream和ostream类(这两个类都是在iostream中声明的)中分别有一组成员函数对位移运算符“”进行重载,以便能用它输入或输出各种标准数据类型的数据。对于不同的标准数据类型要分别进行重载,如ostream operator(int);/用于向输出流插入一个int数据ostream operator(float);/用于向输出流插入一个float数据,ostream operator”重载
7、为对以下标准类型的提取运算符:char,signed char,unsigned char,short,unsigned short,int,unsigned int,19.2 标准流19.2.1 cout,cerr和clog流,ostream类定义了3个输出流对象,即cout,cerr,clog。分述如下。1.cout流对象cout是console output的缩写,意为在控制台(终端显示器)的输出。(1)cout不是C+预定义的关键字,它是ostream流类的对象,在iostream中定义。(2)用“cout”输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型,并根据
8、其类型选择调用与之匹配的运算符重载函数。,(3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中所有数据,然后插入一个换行符,并刷新流(清空缓冲区)。(4)在iostream中只对“”运算符用于标准类型数据的输入输出进行了重载,但未对用户声明的类型数据的输入输出进行重载。,2.cerr流对象cerr流对象是标准错误流。cerr流已被指定为与显示器关联。cerr的作用是向标准错误设备(standard error device)输出有关出错信息。cerr与标准输出流cout的作用和用法差不多。但有一点不同:cout流
9、通常是传送到显示器输出,但也可以被重定向输出到磁盘文件,而cerr流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerr。cerr流中的信息是用户根据需要指定的。p417 ch19_1.cpp,3.clog流对象clog流对象也是标准错误流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。区别:cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。,19.2.2 格式输出,1.使用控制符控制输出格式输出数据
10、的控制符见书中表19-4。注意,这些控制符是在头文件iomanip中定义的,因而程序中应当包含iomanip。P422 ch19_5.cpp,2.用流对象的成员函数控制输出格式除了可以用控制符来控制输出格式外,还可以通过调用流对象cout中用于控制输出格式的成员函数来控制输出格式。用于控制输出格式的常用的成员函数见书中表19.4。流成员函数setf和控制符setiosflags括号中的参数表示格式状态,它是通过格式标志来指定的。格式标志在类ios中被定义为枚举值。因此在引用这些格式标志时要在前面加上类名ios和域运算符“:”。p423 ch19_6.cpp ch19_7.cpp,19.3.1
11、cin流,19.3 标准输入流,例 通过测试cin的真值,判断流对象是否处于正常状态。#include using namespace std;int main()float grade;coutgrade)/能从cin流读取数据if(grade=85)coutgradeGOOD!endl;if(grade60)coutgradefail!endl;coutenter grade:;coutThe end.endl;return 0;,运行情况如下:enter grade:67enter grade:8989 GOOD!enter grade:5656 fail!enter grade:100
12、100 GOOD!enter grade:Z/键入文件结束符The end.如果某次输入的数据为enter grade:100/2输出The end.。在不同的C+系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC+环境下运行此程序,在键入Ctrl+Z时,程序运行马上结束,不输出The end.。,19.3.2 用于字符输入的流成员函数,除了可以用cin输入标准类型的数据外,还可以用istream类流对象的一些成员函数,实现字符的输入。1.用get函数读入一个字符流成员函数get有3种形式:无参数的,有一个参数的,有3个参数的。(1)不带参数的get函数其
13、调用形式为cin.get()用来从指定的输入流中提取一个字符,函数的返回值就是读入的字符。若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File)。,例 用get函数读入字符。#include int main()int c;coutenter a sentence:endl;while(c=cin.get()!=EOF)cout.put(c);return 0;运行情况如下:enter a sentence:I study C+very hard.(输入一行字符)I study C+very hard.(输出该行字符)Z(程序结束)C语言中的getchar函数与流
14、成员函数cin.get()的功能相同,C+保留了C的这种用法。,(2)有一个参数的get函数其调用形式为cin.get(ch)其作用是从输入流中读取一个字符,赋给字符变量ch。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。例7.6可以改写如下:#include int main()char c;coutenter a sentence:endl;while(cin.get(c)/读取一个字符赋给字符变量c,如果读取成功,cin.get(c)为真cout.put(c);coutendendl;return 0;,(3)有3个参数的get函数其调用形式为cin.g
15、et(字符数组,字符个数n,终止字符)或cin.get(字符指针,字符个数n,终止字符)其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。再将例7.6改写如下:#include using namespace std;int main(),char ch20;coutenter a sentence:endl;cin.get(ch,10,n);/指定换行符为终止字符 coutchendl;return 0;运行情况如下:en
16、ter a sentence:I study C+very hard.I study get函数中第3个参数可以省写,此时默认为n。下面两行等价:cin.get(ch,10,n);cin.get(ch,10);终止字符也可以用其他字符。如cin.get(ch,10,x);,2.用成员函数getline函数读入一行字符getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似。即cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)例7.7 用getline函数读入一行字符。#include using namespace std;int main(
17、)char ch20;coutch;coutThe string read with cin is:chendl;cin.getline(ch,20,/);/读19个字符或遇/结束 coutThe second part is:chendl;cin.getline(ch,20);/读19个字符或遇/n结束 coutThe third part is:chendl;return 0;,程序运行情况如下:enter a sentence:I like C+./I study C+./I am happy.The string read with cin is:IThe second part is
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 19 输入输出
链接地址:https://www.31ppt.com/p-4873238.html