《c++14输入输出流》由会员分享,可在线阅读,更多相关《c++14输入输出流(25页珍藏版)》请在金锄头文库上搜索。
1、第十四章 输入输出流,1 C的输入和输出,一、输入输出的含义,(1) 对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。(2) 以外存磁盘文件为对象进行输入和输出。即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O。(3) 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入和输出称为字符串输入输出,简称串I/O。,二、 C+的I/O对C的发展类型安全和可扩展性,在C+的输入输出中,编译系统对数据类型进行严格的检查,
2、凡是类型不正确的数据都不可能通过编译。因此C+的I/O操作是类型安全(type safe)的。C+的I/O操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。C+通过I/O类库来实现丰富的I/O功能。,三、 C+的输入输出流,C+的输入输出流是指由若干字节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。,三、 C+的输入输出流,在C+中,输入
3、输出流被定义为类。C+的I/O库中的类称为流类(stream class)。用流类定义的对象称为流对象。cout和cin并不是C+语言中提供的语句,它们是iostream类的对象,在未学习类和对象时,在不致引起误解的前提下,为叙述方便,把它们称为cout语句和cin语句。,三、 C+的输入输出流,1、iostream类库中有关的类,三、 C+的输入输出流,2、iostream类库中有关的头文件,iostream包含了对输入输出流进行操作所需的基本信息。fstream用于用户管理的文件的I/O操作。strstream用于字符串流I/O。stdiostream用于混合使用C和C+的I/O机制时。i
4、omanip在使用格式化I/O时应包含此头文件。,三、 C+的输入输出流,3、iostream头文件中定义的流对象,在iostream头文件中定义的类有:ios、istream、ostream、iostream、istream _withassign、ostream_withassign、iostream_withassign等。还定义了4种流对象:cin、cout、cerr、clog,4、在iostream头文件中重载运算符,“”,2 标准输出流,标准输出流是流向标准输出设备(显示器)的数据。,一、 cout、cerr和clog流,1、cout流对象,cout是console output的
5、缩写,意为在控制台(终端显示器)的输出。(1) cout不是C+预定义的关键字,它是ostream流类的对象,在iostream中定义。,一、 cout、cerr和clog流,1、cout流对象,(2) 用“cout”运算符用于标准类型数据的输入输出进行了重载,但未对用户声明的类型数据的输入输出进行重载。,一、 cout、cerr和clog流,2、cerr流对象,1、cout流对象,cerr流对象是标准错误流。cerr流已被指定为与显示器关联。cerr的作用是向标准错误设备(standard error device)输出有关出错信息。cerr流中的信息是用户根据需要指定的。例13.1,一、
6、cout、cerr和clog流,3、clog流对象,clog流对象也是标准错误流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。区别: cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。,二、 格式输出,1、使用控制符控制输出格式,2、用流对象的成员函数控制输出格式,例13.2,用于控制输出格式的流成员函数有:precision(n)、width(n)、fill(c)、setf()、unsetf,例13.3,三、用流成员函数put输出字符,ostream类除了提供上面介绍过的用
7、于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如cout.put(a);调用该函数的结果是在屏幕上显示一个字符a。,put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如cout.put(65+32);也显示字符a,因为97是字符a的ASCII代码。,可以在一个语句中连续调用put函数。如cout.put(71).put(79).pu(79).put(68).put(n);在屏幕上显示GOOD。,例13.4,3 标准输入流,一、 cin流,标准输入流是从标准输入设备(键盘)流向程序的数据。,cin是istream类的对象,它从标准输入设备(键盘)获
8、取数据,程序中的变量通过流提取符“”从流中提取数据。流提取符“”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。,例13.5,二、用于字符输入的流成员函数,1、用get函数读入一个字符,(1) 不带参数的get函数,其调用形式为:cin.get()用来从指定的输入流中提取一个字符,函数的返回值就是读入的字符。若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File) 。例13.6,二、用于字符输入的流成员函数,1、用get函数读入一个字符,(2) 有一个参数的get函数,其调用形式为:cin.get(ch)其作用是从输入流中读取一个字符,赋给字符变
9、量ch。如果读取成功则函数返回非0值(真),如失败(遇文件结束符) 则函数返回0值(假)。例13.6,二、用于字符输入的流成员函数,1、用get函数读入一个字符,(3) 有三个参数的get函数,其调用形式为: cin.get(字符数组,字符个数n,终止字符)或 cin.get(字符指针,字符个数n,终止字符)其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符) 则函数返回0值(假)。例13.6,二、用于字符输入的流成员函数,2、用成员函数getli
10、ne函数读入一行字符,getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似。即:cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)例13.7,三、 istream类的其他成员函数,1、eof 函数,eof是end of file的缩写,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(表示真),否则为0(假)。例13.8,2、peek函数,peek函数的作用是观测下一个字符。其调用形式为:c=cin.peek( );cin.peek函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位
11、置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。,三、 istream类的其他成员函数,3、putback函数,其调用形式为:cin.putback(ch);其作用是将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。例13.9,其调用形式为:cin.ignore(n, 终止字符)函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。例:ighore(5, A),跳过输入流中5个字符,遇A后就不再跳了;也可以不带参数或只带一个参数,如ignore( )(n默认值为1,终止字符默认为EOF)相当于ignore(1,EOF)例3.10,4、 ignore函数,三、 istream类的其他成员函数,