《第8章 IO流标准库.ppt》由会员分享,可在线阅读,更多相关《第8章 IO流标准库.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第八章第八章 C+I/O流标准库流标准库本章内容本章内容vI/O流概述流概述v流的输入和输出操作流的输入和输出操作v格式化输入输出格式化输入输出教学重点:教学重点:掌握对掌握对文本文件文本文件的的打开打开和和关闭关闭操作;操作;掌握掌握流插入运算符流插入运算符()和输入流类成)和输入流类成员函数员函数get(),getline()的使用;的使用;一、一、C+I/OC+I/O流概述流概述I/OI/O流:流:数据在外部设备和内存之间的数据流数据在外部设备和内存之间的数据流输入流:由外部设备流向内存的数据流。从输入流中获取数据的输入流:由外部设备流向内存的数据流。从输入流中获取数据的操作称为操作称为
2、输入、读或提取输入、读或提取操作。操作。输出流:由内存流向外部设备的数据流。将数据放入输出流的操输出流:由内存流向外部设备的数据流。将数据放入输出流的操作称为作称为输出、写或插入输出、写或插入操作。操作。I/O操作的要素:指定操作的要素:指定I/O设备、设备、I/O操作类型和方式、操作对象操作类型和方式、操作对象 内存内存x xy y2 23 3cincinxy;xy;3 23 23 23 2输输出出设设备备输输入入设设备备屏幕屏幕磁盘磁盘文件文件键盘键盘磁盘磁盘文件文件1.1.程序中的输入程序中的输入/输出操作输出操作coutcoutxyx(提取运算符):输入,从流中获取数据到内存。(提取运
3、算符):输入,从流中获取数据到内存。与与getlinegetline输入字符数据的区别输入字符数据的区别 例:例:带三个参数带三个参数getget与与getlinegetline输入的区别输入的区别使用使用getget使用使用getlinegetline执行执行执行执行差别是:差别是:在遇到终止字符时,在遇到终止字符时,get()get()使读指针停在终使读指针停在终止字符处,而止字符处,而getlinegetline()()将读指针移到终止字符的下将读指针移到终止字符的下一个位置。一个位置。例:例:文件示例文件示例执行执行Data.txtData.txt三、文件三、文件I/OI/O流的使用流
4、的使用0 0 1 2 0 0 1 2 文件结束符文件结束符 字节编号:字节编号:1 2 3 4 5 n-1 1 2 3 4 5 n-1 Ctrl+ZCtrl+Z(2 2)文件结构:)文件结构:C+把每个文件都看成是一个有序的字节把每个文件都看成是一个有序的字节序列,每个文件都以文件结束符标志文件的结束。例如:序列,每个文件都以文件结束符标志文件的结束。例如:(1)文件:)文件:存储在外部设备上的存储在外部设备上的数据数据。用于长期保存数据。用于长期保存数据。三、文件三、文件I/OI/O流的使用流的使用1.磁盘文件简介磁盘文件简介存储内容存储内容(3)文件格式)文件格式文本文件:文本文件:数值和
5、字符均按数值和字符均按ASCII码格式存储码格式存储 例如,数字例如,数字3.141存储时占存储时占5个字节。个字节。00110011 00101110 00110001 00110100 00110001二进制文件:二进制文件:字符按字符按ASCII码存储,数值按内部形式存储码存储,数值按内部形式存储 例如,数字例如,数字3.141存储时占存储时占4个字节。个字节。01000000 01001001 00001111 1101000001000000 01001001 00001111 11010000文本文件可以用文本编辑器打开查看便于阅读,读写时需文本文件可以用文本编辑器打开查看便于阅读
6、,读写时需要进行格式转换;二进制文件用文本编辑器打开时看到的是要进行格式转换;二进制文件用文本编辑器打开时看到的是乱码,不便于阅读;读写时不需要格式转换,效率高。乱码,不便于阅读;读写时不需要格式转换,效率高。三、文件三、文件I/OI/O流的使用流的使用示例示例示例示例(4)文件的读写方式)文件的读写方式 文件结束符文件结束符 1 2 3 4 5 n-1 1 2 3 4 5 n-1 Ctrl+ZCtrl+Z随机方式:在文件的任何位置进行读或写。随机方式:在文件的任何位置进行读或写。读读/写指针写指针顺序方式:按数据在文件中的物理排列顺序依次读或写。顺序方式:按数据在文件中的物理排列顺序依次读或
7、写。注意:在注意:在C+中,文本文件只能以顺序方式读写;中,文本文件只能以顺序方式读写;二进制文件既可以顺序方式读写也可以二进制方式二进制文件既可以顺序方式读写也可以二进制方式读写。读写。2.文件的使用文件的使用定义文件流对象定义文件流对象打开文件用于读和写打开文件用于读和写检查打开是否成功检查打开是否成功读读或写数据或写数据使用完文件后要关闭文件使用完文件后要关闭文件3.3.文件流使用的类和头文件文件流使用的类和头文件 类:类:ifstreamifstream、ofstreamofstream、fstreamfstream 头文件:头文件:fstream.hfstream.h四、四、文件输出
8、流文件输出流 1.1.定义文件输出流对象定义文件输出流对象 2.2.当在程序中要将数据写入一个当在程序中要将数据写入一个磁盘磁盘文文件件时,需要先定义时,需要先定义一一个个ofstream类的对象(输出流对象类的对象(输出流对象)并与该文件关联。并与该文件关联。3.3.方法主要有两种方法主要有两种:方法方法方法方法1 1 1 1:先定义输出流类对象先定义输出流类对象,再调用再调用open成员函数打开文件成员函数打开文件 例:例:ofstream outfile;/建立文件输出流类对象建立文件输出流类对象 outfile.open(“datal.txt”,ios:out);/打开文件打开文件 方
9、法方法方法方法2 2 2 2:在定义输出流类对象时打开相关联的文件在定义输出流类对象时打开相关联的文件 例:例:ofstream outfile(“datal.txt”,ios:out);四、输出流四、输出流 2.2.文件打开成功与否的判断方法文件打开成功与否的判断方法打开文件失败,对象取值为打开文件失败,对象取值为0 0;成功则为非;成功则为非0 0。3.3.使用完文件后应该关闭文件,方法是:使用完文件后应该关闭文件,方法是:文件流对象文件流对象.close();.close();四、输出流四、输出流4.4.向输出流插入数据的方法向输出流插入数据的方法 1 1)使用重载的流插入运算符()使用
10、重载的流插入运算符()输出输出各种数据各种数据 2 2)使用输出流类)使用输出流类成员函数成员函数put()输出一个字符输出一个字符。3 3)使用输出流类)使用输出流类成员函数成员函数write()以二进制形式以二进制形式输出数据。输出数据。例例1 1 使用使用向文本文件写入数据向文本文件写入数据执行执行test1.txttest1.txt 例例2 2:putput函数使用示例函数使用示例执行执行file1.txtfile1.txtfile2.txtfile2.txt五、五、五、五、文件输入流文件输入流 1.1.定义文件输入流对象定义文件输入流对象 2.2.从一个从一个磁盘磁盘文文件输件输入数
11、据前,需要定义入数据前,需要定义一个一个ifstream类类的对象(输的对象(输入入流对象流对象)与该文件关联。与该文件关联。方法主要有两种方法主要有两种:方法方法方法方法1 1 1 1:先定义文件对象先定义文件对象,然后调用然后调用open成员函数打开文件成员函数打开文件 例:例:ifstream infile;/声明文件输入流对象声明文件输入流对象 infile.open(“data1.txt”,ios:in);/打开文件,使流对象与文件建立联系打开文件,使流对象与文件建立联系方法方法方法方法1 1 1 1:在定义文件对象时打开相关联的文件在定义文件对象时打开相关联的文件 例:例:ifst
12、ream infile(“data1.txt”,ios:in);五、五、五、五、文件输入流文件输入流2.2.从输入流提取数据的方法从输入流提取数据的方法 1 1)使用重载的流提取运算符()使用重载的流提取运算符()从文本文件读数据。)从文本文件读数据。执行执行例例2 2 使用成员函数使用成员函数getline()从文本文件读数据。从文本文件读数据。例例3 3 利用利用读取文件中的数值数据示例。读取文件中的数值数据示例。执行执行test.txttest.txt例例4:get get函数使用示例函数使用示例函数使用示例函数使用示例。执行执行file1.txtfile1.txtfile2.txtfi
13、le2.txt六、六、六、六、以随机方式读以随机方式读/写文件写文件 对文件的读写受到一个定位指针的控制。对文件的读写受到一个定位指针的控制。读指针:从读指针当前所指位置读出数据,向后移动读读指针:从读指针当前所指位置读出数据,向后移动读指针使其指向下一个数据。指针使其指向下一个数据。写指针:把数据写到写指针当前所指位置,向后移动写写指针:把数据写到写指针当前所指位置,向后移动写指针,使其指向下一个写数据的位置。指针,使其指向下一个写数据的位置。利用利用C+C+流类中提供的成员函数,可改变读流类中提供的成员函数,可改变读/写指针,从而写指针,从而实现对文件的随机读实现对文件的随机读/写。写。随
14、机访问多用于二进制文件。随机访问多用于二进制文件。六、六、六、六、以随机方式读以随机方式读/写文件写文件 操作写指针的成员函数操作写指针的成员函数 1 1)移动写指针。)移动写指针。调用格式调用格式1:输出流对象名输出流对象名.seekp(流中位置流中位置);调用格式调用格式2:输出流对象名输出流对象名.seekp(偏移量偏移量,参照位置参照位置);取取iosios类中的枚举量:类中的枚举量:beg(0)相对文件头;相对文件头;curr(1)相对文件当前位置;相对文件当前位置;end(2)相对文件尾。相对文件尾。2 2)返回写指针当前位置(相对于文件头的字节数)。)返回写指针当前位置(相对于文
15、件头的字节数)。调用格式:调用格式:输出流对象名输出流对象名.tellp()六、六、六、六、以随机方式读以随机方式读/写文件写文件 操作读指针的成员函数操作读指针的成员函数 1 1)移动读指针。)移动读指针。调用格式调用格式1:输入流对象名输入流对象名.seekg(流中位置流中位置);调用格式调用格式2:输入流对象名输入流对象名.seekg(偏移量偏移量,参照位置参照位置);取取iosios类中的枚举量:类中的枚举量:beg(0)相对文件头;相对文件头;curr(1)相对文件当前位置;相对文件当前位置;end(2)相对文件尾。相对文件尾。2 2)返回读指针当前位置(相对于文件头的字节数)。)返
16、回读指针当前位置(相对于文件头的字节数)。调用格式:调用格式:输入流对象名输入流对象名.tellg()例例 文件的随机访问示例。把文件的随机访问示例。把100100个素数存入文件个素数存入文件data.bindata.bin。从从文件文件data.bindata.bin中取出第中取出第n n个素数并输出。个素数并输出。8.4 8.4 格式化输入输出格式化输入输出 格式化输入输出是指控制文本模式格式化输入输出是指控制文本模式I/OI/O流的格式。例如,流的格式。例如,设置字段宽度、对齐方式、输出数字的精度等。设置字段宽度、对齐方式、输出数字的精度等。C+C+提供两种提供两种进行格式化输入进行格式
17、化输入 输出的方法输出的方法:用用ios类的成员函数设置格式类的成员函数设置格式 使用格式操纵算子使用格式操纵算子 格式成员函数和格式操纵算子详细情况见书。格式成员函数和格式操纵算子详细情况见书。例:例:格式化输出成员函数使用示例。格式化输出成员函数使用示例。01234567890123451234 1234 567812341234*1234123.46成员函数成员函数width()只对一个输出项有效。只对一个输出项有效。运行结果:运行结果:0123456789012345*1234 1234*1234$12.346 运行结果:运行结果:例:例:操纵算子使用示例操纵算子使用示例 1.复习本章
18、的重点内容及相关例题。复习本章的重点内容及相关例题。复习本章的重点内容及相关例题。复习本章的重点内容及相关例题。2.完成完成完成完成 练习练习练习练习1010的第的第的第的第2 2、3 3、4 4题,不交。题,不交。题,不交。题,不交。课堂抽查。课堂抽查。课堂抽查。课堂抽查。3.完成练习完成练习完成练习完成练习1010的的的的 第第第第5 5、6 6、8 8、9 9题的程题的程题的程题的程序编写,上机调试后书面提交。序编写,上机调试后书面提交。序编写,上机调试后书面提交。序编写,上机调试后书面提交。教学进程教学进程教学进程教学进程课外复习及作业课外复习及作业课外复习及作业课外复习及作业1.运行练习运行练习运行练习运行练习1010的第的第的第的第3 3、4 4题的程序,题的程序,题的程序,题的程序,验证你的分析结果。验证你的分析结果。验证你的分析结果。验证你的分析结果。2.调试作业中的编程题调试作业中的编程题调试作业中的编程题调试作业中的编程题 教学进程教学进程教学进程教学进程上机练习题上机练习题上机练习题上机练习题