
C++第12章 IO流类库.ppt
45页第12章 C++的I/O流类库,1,流的概念C++的I/O是以字节流的形式实现的输入操作是字节从输入设备流向内存;输出操作是字节从内存流向输出设备流实际上是一个字节序列2,这些基本的I/O流类被包含在iostream.h头文件中,该头文件提供了大量用于I/O的操作它还包含有两个重载运算符:>(提取符)和4个标准流对象:cin处理标准输入,即键盘输入;cout处理标准输出,即屏幕输出;cerr处理标准错误信息,提供不带缓冲区的屏幕输出;clog处理输出信息,提供打印机输出;,基本的I/O流类,ios,istream,ostream,iostream,,,,,(虚基类),3,文件操作的I/O流类,ios,istream,ostream,iostream,fstreambase,ifstream,ofstream,fstream,,,,,,,,,,,,图中给出有关文件操作的流类有关文件操作的类被放在fstream.h头文件中4,13.1屏幕输出操作I/O流类库中ostream类提供了如下的输出操作13.1.1 使用预定义的插入符插入符();插入运算符可连续使用,但应注意计算顺序系统指定标准输出设备屏幕的对象为cout,将输出流显示在屏幕上的格式如下: cout 中运算符的优先级。
5,13.1.2 使用成员函数put()输出一个字符成员函数put()的格式如下: ostream,6,13.1.3使用成员函数write()输出一个字符串成员函数write()是属于ostream类的,函数格式如下: cout.write(const char *str,int n);str是一个字符指针或字符数组名,用来存放一个字符串,也可以是字符串常量;n用来指定输出字符串中字符的个数7,[例13.1]分析下列程序的输出结果,熟悉put()和write()函数的用法程序内容如下:#include #include void print(char *s){ cout.write(s,strlen(s)).put('\n'); cout.write(s,6)<<'\n';}void main(){ cout.put('B').put('E').put('I').put('J').put('I').put('N').put('G').put('\n'); char *str="I love BEIJING!"; cout<<"The string is "< 13.2.1 使用预定义的提取符提取符(>>)被重载定义在iostream.h头文件中,其格式如下: istream ,9,13.2.2 使用成员函数get()获取一个字符该函数格式如下: char istream::get();该函数为从指定的输入流中获取一个字符存放在指定的变量或对象中例如, char ch = cin.get();该语句表明从键盘输入中获取一个字符存放在变量ch中10,[例13.2]分析下列程序的输出结果include void main(){ char ch; cout<<"Etern a sentence:"; while((ch=cin.get())!=EOF) cout.put(ch);},,执行程序后,屏幕上显示如下信息: Enter a sentence: 123 abc显示结果如下: 123 abc输入后,退出程序11,13.2.3使用成员函数 getline()获取一行字符该函数格式如下: getline(char *buf,int n,deline = ‘\n’);该函数结束的条件:①从输入流中读取n-1个字符②从输入流中读取到换行符③从输入流中读取到结束符,12,#include const int SIZE=80;void main(){ char buf[SIZE]; int lcnt=0,lmax=-1; coutlmax) lmax=count; cout<<"Line # "< 13,执行该程序后,显示如下信息:Enter a sentence:This is a program.Line #1:19This is a program.You are a student.Line #2:19You are a student.I love Beijing!Line #3:16I love Beijing!,,,,输出如下结果:Longest line : 19Total line : 3,14,13.2.4使用成员函数read()读取若干字符从输入流中每次读取指定数目的字符,并存放在指定的地方该函数的格式如下: cin.read(char *buf,int size);可用gcount()函数统计上一次使用read()读取的字符个数15,[例13.4]分析下列程序的输出结果程序内容如下:#include void main(){ const int SIZE=80; char buf[SIZE]=""; cout<<"Input...\n"; cin.read(buf,SIZE); cout< 1.控制格式标志位(见书中388页表13-1)left(左对齐);right(右对齐);dec(十进制);oct(八进制);hex(十六进制)等17,2.设置标志字的成员函数long flags() —— 返回当前的标志字long flags(long) —— 用指定参数更新标志字long setf(long setbits,long field) —— 将filed所指的标志位清0,将setbits的标志位置1long setf(long) —— 设置参数指定的标志位long unsetf(long) —— 清除参数指定的标志位adjustfield 为 left | right | internalbasefiled 为 dec | oct | hexfloatfiled 为 | scientifc | fixed,18,3.控制输出格式的成员函数width() ——返回当前输出的数据宽度width(int) —— 设置当前输出的数据宽度fill() —— 返回当前所使用的填充字符fill(char) —— 设置当前所用的填充字符precision() ——返回当前浮点数的有效数字个数precision(int) —— 设置当前浮点数的有效数字个数,19,20,13.3.2 使用控制符进行格式输出I/O流类库中提供的用于格式输出的操作子见书中391页表13-2,它们存放在iomanip.h头文件中。 这些操作子可直接插入在输出流中被插入符操作21,22,23,24,13.4 插入符和提取符的重载前面程序中使用的插入符(>)是系统对左移和右移运算符进行的预定义用户还可以根据需要再对插入符和提取符进行重载例[13.8]编程重载插入符和提取符,用中国表示日期的习惯对日期进行输入和输出25,26,27,28,13.5磁盘文件的输入和输出13.5.1 文件的打开和关闭操作,29,30,31,13.5.2 文本文件的读写操作,文本文件的读/写操作指向打开的文件写入字符信息,或读出字符信息的操作32,13.5.3 二进制文件的读写操作,33,34,35,13.5.4 随机访问数据文件,36,37,38,39,40,41,42,43,44,45,。
