第17章 输入输出流

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• • • •
1-4
输入/输出流成员函数
• C++中,输入/输出流除了可以使用前面介绍的输入/输出流 对象外,类istream还有三个从流中进行非格式化抽取的成 员函数:get()、getline()、put()、read()和write()函数及其 他成员函数。
1-5
输入/输出格式控制
• C++仍可使用C中的printf()和scanf()进行格式化控制。 同时,C++又提供了两种格式化控制的方法:一种是使 用ios类中的有关格式控制的成员函数,另一种是使用 被称为格式控制符的特殊类型的函数。
1-19
【题目255】编写一个程序,建立类triangle,用来存储直 角三角形的宽与高,在该类中重载输出运算符函数“<<” 在屏幕上显示三角形。 【题目256】从输入流中分析出数字串。例如:设输入串为 A012BCD378 274D<CR> EF55G^Z<CR> 则输出为: Digit string 1 is: 012 Digit string 2 is: 378 Digit string 3 is: 274 Digit stirng 4 is: 55
1-20
【题目257】程序中有说明语句: int a1; char a2 ; double a3 ; 根据下面的输出要求写出相应的cout语句。 (1)输出a1、a2、a3的值,每两个值之间用5个空格间隔 。; (2)以固定长度10按左对齐方式输出变量a1的值。 (3)以固定长度10按左对齐方式输出变量a1的值,如果a1 值为正,要求输出前面的正号。 (4)以固定长度15按右对齐方式输出变量a3的值,用填充 字符*填充不足部分(用浮点数的定点数表示法表示)。 (5)以固定长度15、小数点后保留3位、按左对齐方式输 出变量a3的值。
1-17
【题目252】有一元二次方程ax2+bx+c=0,其一般解为 x、1 、2= ……但若a=0,或b^2-4ac<0时,用此公式出错。 编写一个C++程序,从键盘输入a,b,c的值,求x1和x2 。如果a=0或b^2-4ac<0,输出出错信息。 【分析】该试题主要考查cerr和clog等标准输出流对象的使 用。该试题要求在a=0或b^2-4ac<0时不能使用求根公式 ,并输出错误信息,此处即可使用cerr输出流来实现。判 断是否出错可通过分支结构的if语句来实现。 【题目253】编写一个C++程序,从键盘输入一行字符,逐 个读入字符,将读入字符赋给字符变量c,然后输出该字 符。
1-15
【题目250】分析下列程序的输出结果:
#include<iostream> using namespace std; int main() { char buf[]=” 12345” int I,j; istrstream s1(buf); s1>>I; istrstream s2(buf,3); s2>>j; cout<<I+j<<endl; }

1-3
标准输入/输出流
• C++将一些常用的流类对象,如键盘输入、显示器输出 、程序运行出错输出、打印机输出等,定义并内置在系 统中,供用户直接使用。这些系统内置的用于设备间传 递数据的对象称为标准流类对象,共有4个。 cin对象:与标准输入设备相关联的标准输入流。 cout对象:与标准输出设备相关联的标准输出流。 cerr对象:与标准错误输出设备相关联的非缓冲方式的 标准输出流。 clog对象:与标准错误输出设备相关联的缓冲方式的标 准输出流。
1-11
小结
本章主要介绍了C++的输入/输出流的相关内容。首先由C语言中的 输入/输出函数scanf()和printf()的缺陷引出C++中的输入/输出 流,接着详细讲解了C++的标准输入/输出流的相关概和使用, 以及C++的输入/输出格式控制。此外,本章就输入/输出运算 符“>>”和“<<”进行了重载,使其能够进行类对象的输入/输 出。本章最后对命名空间的相关概念和使用进行了讲述。
1-21
【题目258】定义一个Dog类,包含体重和年龄两个数据成 员及相应的成员函数。声明一个对象dog1,体重为5, 年龄为10,使用输入输出流流把dog1的状态写入磁盘文 件;再声明另一个对象dog2,通过读文件把dog1的状态 赋给dog2。
【分析】该试题主要考查文件的操作。该程序首先须定义类 Dog,在主程序中创建对象dog1,并通过write函数写入 到磁盘文件中,再创建对象dog2,打开文件后使用read 函数从指定文件中读取信息并赋给对象dog2。
1-18
【题目254】编写一个程序,将已有一个字符串"BASIC", 要求把它们按相反的顺序输出。 【分析】该试题主要考查输出流cout的成员函数问题。该试 题可首先定义一个字符串并将其初始化为"BASIC",再 通过循环语句,从字符串的最后一个字符开始通过标准 输出流cout的put()函数进行输出,直到输出字符串的第 一个字符为止。 【核心代码】
1-14
【题目249】 cin是( )的一个对象,处理标准输入。cout、cerr 和clog是( )的对象,cout处理标准输出,cerr和clog都处理 标准出错信息,只是( )输出不带缓冲,( )输出带缓冲。 A.istream B.ostream C.cerr D.clog 【分析】该试题主要考查输入输出流的一些对象。根据前面学习的 内容,读者知道输入流cin是istream类流的对象,而cout、cerr 和clog等3个都是ostream类的对象。其中,cout处理标准输出 ,cerr和clog都处理标准出错信息,其区别在于前者是非缓冲输 出,后者为带缓冲输出。因此,根据如上原则,该试题的正确选 项应为ABCD。
1-8
命名空间
命名空间是C++新增加的一种功能,在C语言中没有命名空 间的概念。命名空间的主要作用是为了防止标识符名称 冲突,将逻辑上相关的的标识符置于同一命名空间中。 在C++中,不仅各种库函数和类使用命名空间来界定,用 户也可以定义自己的命名空间。
命名空间是为解决C++中标识符的命名冲突而服务的。解决 的办法就是将将逻辑上相关的标识符置于同一命名空间 中。


1-6
重载输出运算符“<<”
• 重载输出运算符“<<”也称为插入运算符,用于用户自 定义类型数据的输出。重载运算符“<<”的一般形式为 : ostream &operator<<(ostream &stream,类名 对象名 ) { //操作代码 return stream; } 其中,第一个参数stream是对ostream对象的引用, 必须是输出流,它可以是其他合法的标识符,但必须与 return后面的标识符相同;第二个参数接收将被输出的 对象。
1-9
定义命名空间
C++中,有两种形式的命名空间:有名命名空间和无名(匿 名)命名空间。这两种命名空间的定义格式分别如下。 有名命名空间: namespace 命名空间名 { 声明和定义序列 } 无名(匿名)命名空间: namespace { 声明和定义序列 }
1-10
使用命名空间
由于命名空间的定义中包含了许多成员的定义,那么在实际 的程序设计中,如何来使用命名空间中的这些定义呢? 标准C++给出了三种引用命名空间内成员的方法,分别是 使用作用域运算符、using指令和using声明.
1-12
习题
【题目248】分析下列程序的输出结果。 #include<iostream> #include<fstream.h> #include<strstream.h> const int N=80; int main() { char buf[N]; ostrstream out1(buf,sizeof(buf)); int a=50; for(int I=0;I<6;I++,a+=10) out1<<”a=”<<a<<”,”; out1<<'\ 0' cout<<”Buf:”<<buf<<endl; double PI=3.1415926; out1.setf(ios::fixed|ios::showpoint); out1.seekp(0); out1<<”the value of ip=”<<PI<<'\ 0' cout<<buf<<endl; char *pstr=out1.str(); cout<<pstr<<endl; }
1-22
#include <iostream> using namespace std; int main() { char *a="BASIC"; //字符指引指向'B' for(int i=4;i>=0;i--) cout.put(*(a+i)); //从最后一个字符开始输出 cout.put('\n'); return 0; }
• • • • • •
1-7
重载输入运算符“>>”
重载输入运算符“>>”也称为提取运算符,用于用户自定义 类型数据的输入。定义运算符“>>”重载函数的一般形式为 : istream &operator>>(istream &stream,类名 对象名) { //操作代码 return stream; } 其中,第一个参数stream是对istream对象的引用,必须是 输入流,它可以是其他合法的标识符,但必须与return后面 的标识符相同。第二个参数是一个引用,前面的“&”不能省 略。
第十七章 输入/输出流
杨章伟 e-mail:yang505412@163.com
课程内容安排
• • •
C++中引入标准输入/输出流的原因。 常用标准输入/输出流对象。 输入/输出流成员函数的使用和格式控制。
1-2
输入/输出流简介
• C++完全支持C的输入/输出系统,但由于C的输入/输出 系统不支持类和对象,所以C++又提供了自己的输入/ 输出系统,并通过重载运算符“<<”和“>>”来支持类 和对象的输入/输出。C++的输入/输出系统是以字节流 的形式实现的。 C++没有使用C的输入/输出函数库,而是使用iostream 类库。iostream是通过类的继承,以及类的成员函数 的重载来实现的,从而使iostream类库使用统一的函 数接口操作标准I/O、文件、存储块等输入/输出设备。 同时,iostream类库具有很好的扩展性,用户可通过 重载对其进行扩展。
1-13
【分析】该试题主要考查输出流的实现。上述程序段定义了 输出流对象out1,并通过循环语句将变量a中Fra Baidu bibliotek值输出, 同时调用输出流的格式控制函数setf和seekp函数对输出 格式进行控制,并输出一个浮点型变量的值。根据循环 语句和输出格式,其输出结果如下: Buf:a=50;a=60;a=70;a=80;a=90;a=100; The value of pi is 3.14159265 The value of pi is 3.14159265
1-16
【分析】该试题主要考查输入流类的问题。上述程序中定义 了字符数组并为其赋初值12345,同时创建了输入流对象 s1,通过该对象来对字符数组进行操作,最后将变量I和j 中的值进行相加。根据前面学习的内容,读者可以分析 出,该程序的输出结果为12468。 【题目251】编写一个程序,统计从键盘上输入每一行字符 的个数,从中选出最长的行的字符个数,统计共输入多 少行。 【分析】该试题主要考查输入流对象的成员函数的使用。该 试题的实现可以在接收用户输入的同时就通过对象cin的 成员函数gcount进行字符个数的统计,同时通过一个循 环语句接收用户的输入,使用cin的成员函数getline()判 断用户的输入是否完成。
一般来说,ios类的成员函数进行格式控制主要是通过 对格式状态字、域宽、填充字符和输出精度操作来完成 的。 使用ios类的成员函数控制输入/输出格式时,每个函数 的调用都要写一条语句,它们还不能直接嵌入到输入/ 输出语句中,这使得使用很不方便。为此,C++由提供 了另外一种输入/输出格式的控制方法,即使用一种称 为格式控制符的特殊函数。
相关文档
最新文档