下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第10章 输入输出流

第10章 输入输出流.ppt

第10章 输入输出流

瑷蓉
2011-07-20 0人阅读 举报 0 0 暂无简介

简介:本文档为《第10章 输入输出流ppt》,可适用于高等教育领域

第章输入输出流第章输入输出流输入输出流概述插入运算符及提取运算符格式化输入输出文件的输入输出输入输出文件流fstream输入输出流概述输入输出流概述流的概念“流”是一种抽象的形态指的是计算机里的数据从一个对象流向另一个对象。这里数据流入和流出的对象通常是指计算机中的屏幕、内存、文件等一些输入输出设备。数据的流动就是由IO流类来实现的。如预定义流对象cin和cout实现的数据流动过程:C中的IO流负责建立程序与设备对象之间的连接它像一个桥梁沟通了数据的产生者和消费者使他们之间产生数据的流动。第章输入输出流输入输出流概述输入输出流概述流类库的结构第章输入输出流第章输入输出流IO流类说明表第章输入输出流IO流类说明表(续)输入输出流概述输入输出流概述流类库的结构(续)流类库中与文件输入输出相关的文件流类结构:第章输入输出流插入运算符与提取运算符插入运算符与提取运算符插入运算符插入运算符“<<”:通常用于插入数据到一个输出流对象中流对象再进一步将数据输出到它所关联的设备中。如:cout<<“HelloWorld!”插入运算符“<<”适用于任何输出流对象如输出文件流ofstream的对象等。“<<”右侧可以是任何标准数据类型的变量及常量也可以是字符串变量及常量。如:cout<<i<<‘s’<<<<‘’<<f第章输入输出流插入运算符与提取运算符插入运算符与提取运算符提取运算符提取运算符“>>”:通常用于从输入流对象中提取数据。如:inticharbufcin>>icin>>buf提取运算符“>>”适用于任何输入流对象如输入文件流ifstream的对象等。“>>”右侧可以是任意标准数据类型的变量也可以是字符串变量。注意:使用提取运算符“>>”提取数据时以空白符(如空格、回车、tab)作为数据的分割符因此提取字符串数据时不能提取空白字符。第章输入输出流格式化输入输出格式化输入输出C中的IO流可以完成输出输入的格式化操作如设置域宽、设置精度及整数进制等。设置输入输出格式的方法:使用流操纵元只需把流操纵元插入(提取)到输出流(输入流)中即可对输出流(输入流)进行格式化如setiosflags、setw、setfill、setprecision、hex、oct等使用流操纵元时需在程序中包含头文件iomaniph通过流的成员函数即由流对象直接调用完成格式化如setf、unsetf、width、fill、precision等。使用流成员函数的优点是在设置格式同时可以返回以前的设置便于恢复原来的设置。第章输入输出流格式化输入输出格式化输入输出输出宽度控制:setw和width使用流操纵元setw和成员函数width可以控制当前域宽(即输入输出的字符数)。注意:()宽度的设置仅适用于下一个插入或读取的数据。()在输出流中控制域宽如果输出数据的宽度比设置的域宽小将以默认右对齐方式输出数据左边空位会用填充字符来填充(填充字符默认是空格)。()如果输出数据的宽度比设置的宽度大数据不会被截断将输出所有位数。第章输入输出流例使用setw操纵元控制域宽例使用setw操纵元控制域宽#include<iostreamh>#include<iomaniph>voidmain(){cout<<<<endlcout<<setw()<<<<<<endl}程序运行结果为:第章输入输出流例使用width成员函数控制域宽例使用width成员函数控制域宽#include<iostreamh>voidmain(){char*str={“abc”,“abcde”,“abcdef”}for(inti=i<i){coutwidth()cout<<stri<<endl}}程序运行结果为:abcabcdeabcdef第章输入输出流格式化输入输出格式化输入输出填充字符控制:setfill和fill在缺省情况下如果域宽大于数据宽度时填充多余空间的字符是空格。如果要改变填充字符可以使用流操纵元setfill和成员函数fill。注意:设置了填充字符后将对程序后面的输出代码产生永久影响直到下一次再改变填充字符为止。第章输入输出流例使用setfill控制填充字符例使用setfill控制填充字符#include<iostreamh>#include<iomaniph>voidmain(){doublevalues={,,,}cout<<setfill(‘*’)for(inti=i<i)cout<<setw()<<valuesi<<endl}程序运行结果为:第章输入输出流格式化输入输出格式化输入输出输出精度控制:setprecision和precision使用流操纵元setprecision以及成员函数precision可以控制浮点数输出的精度。注意:精度一旦设置就可以用于以后所有输出的数据直到下次精度发生改变。使用成员函数precision可以返回设置前的精度。第章输入输出流例控制浮点数精度例控制浮点数精度#include<iostreamh>#include<iomaniph>voidmain(){doublevalue=intPreprecision=coutprecision()cout<<value<<endlcout<<setprecision(Preprecision)<<value<<endl}程序运行结果为:第章输入输出流格式化输入输出格式化输入输出输出精度控制(续)所设置的精度值在程序没有设置计数法情况下表示浮点数的有效数字的个数。若程序设置了计数法(ios::fixed或ios::scientific)则表示小数点后数字的个数。ios::fixed表示以定点法输出浮点数(不带指数)。ios::scientific表示以科学计数法输出浮点数。第章输入输出流例(续一)例(续一)#include<iostreamh>#include<iomaniph>voidmain(){doublevalue=cout<<setiosflags(ios::fixed)intPreprecision=coutprecision()cout<<value<<endlcout<<setprecision(Preprecision)<<value<<endl}程序运行结果为:第章输入输出流例(续二)例(续二)#include<iostreamh>#include<iomaniph>voidmain(){doublevalue=cout<<setiosflags(ios::scientific)intPreprecision=coutprecision()cout<<value<<endlcout<<setprecision(Preprecision)<<value<<endl}程序运行结果为:ee第章输入输出流格式化输入输出格式化输入输出其他格式状态上例中的setiosflags也是一个流操纵元定义在头文件<iomaniph>中。通过将setiosflags的参数设置为各种不同流格式状态标志值可以对相应的输入输出格式进行控制。若需要同时设置多个标志位时可以使用按位或运算符(|)将不同的标志项结合。第章输入输出流第章输入输出流IO流格式状态标志例使用setiosflags控制流格式例使用setiosflags控制流格式#include<iostreamh>#include<iomaniph>voidmain(){intx=cout<<setiosflags(ios::internal|ios::showpos)cout<<setw()<<x<<endlcout<<setiosflags(ios::hex|ios::uppercase|ios::showbase)cout<<setw()<<x<<endlcout<<oct<<setw()<<x<<endl}第章输入输出流程序运行结果为:XC格式化输入输出格式化输入输出其他格式状态(续)使用流操纵元setiosflags设置相应的标志位后对流对象产生的影响是持久的若想恢复以前的默认设置可以通过resetiosflags流操纵元关闭相应的标志位。如:cout<<resetiosflags(ios::internal|ios::showbase)可以取消对域中对齐格式的设置同时取消显示数制标志恢复系统默认格式。第章输入输出流文件的输入输出文件的输入输出处理文件输入输出的流类主要有ofstream、ifstream和fstream三个类。均定义在fstreamh中。向文件输出数据即将数据保存到文件中时要使用ofstream类从文件中读取数据即从文件中输入数据时要使用ifstream类。而使用fstream类可以同时进行输入及输出操作。文件输入输出的一般步骤为:创建流对象并打开文件→读写文件→关闭文件第章输入输出流文件的输入输出文件的输入输出打开文件使用默认构造函数然后调用open函数用法如下:文件IO流类名流对象名声明一个流对象流对象名open(文件名打开方式)调用open函数打开文件如:ofstreammyfilemyfileopen(“bootini”,ios::out)参数“文件名”:用于指定要打开文件的文件名若为不带路径的文件名表示与当前应用程序在同一文件夹若带路径的文件名注意‘’应用‘’表示第章输入输出流文件的输入输出文件的输入输出打开文件(续一)参数“打开方式”:用于指定文件的打开方式第章输入输出流文件的输入输出文件的输入输出打开文件(续二)在构造函数中直接指定文件名及打开方式用法如下:文件IO流类名流对象名(文件名打开方式)如:ifstreaminfile(“D:hellodat”,ios::binary)第章输入输出流如果使用以上两种方法打开文件不成功(如文件路径不正确)文件流对象将为因此习惯上可用如下方式判断打开操作是否失败:if(!myfile){……}如果打开文件的操作不成功文件的输入输出文件的输入输出写入文件如果写入的是标准数据类型的数据或字符串可以直接通过插入运算符(<<)将数据插入到输出文件流对象中。如:ofstream myfile(“D:datatxt”,ios::out)myfile<<“Hello!”<<‘’<<<<endl使用插入运算符在写入数据时仅局限于标准数据类型及字符串对于自定义类型的数据并不能直接插入。第章输入输出流空格是为了在文件中将数据分隔开以便在读出时能正确区分数据。文件的输入输出文件的输入输出写入文件(续一)put函数:使用put函数可以将一个单个字符写入流对象进而写入流对象所关联的文件中。put函数每次只能写一个字符。用法如下:myfileput(‘A’)          char ch=‘A’myfileput(ch)           注意:使用put函数输出数据不受格式影响即设置的域宽和填充字符对于put函数不起作用。第章输入输出流文件的输入输出文件的输入输出写入文件(续二)write函数:把内存中的一块内容写入输出流对象中。主要用于输出数组及自定义类型变量等具有连续内存的数据。write函数的第一个形参:用于指定输出数据的内存起始地址该地址为字符型(char*)因此传递的实参应为字符型的指针。write函数的第二个形参:用于指定所写入的字节数即从该起始地址开始写入多少字节的数据第二个形参类型为整型。第章输入输出流例使用write函数输出CRect类的对象例使用write函数输出CRect类的对象#include<fstreamh>voidmain(){CRectrrSetColor(“Red”)rMove(,)rSetSize(,)ofstreamoile(“D:atxt”,ios::out)oilewrite((char*)r,sizeof(r))oileclose()调用close函数关闭文件}第章输入输出流定义输出文件流对象并打开文件进行输出将r地址强制类型转换(char*)为字符型指针例使用write函数输出整型数组例使用write函数输出整型数组#include<fstreamh>voidmain(){intarray={,,,,,}ofstreamoile(“D:atxt”,ios::app)oilewrite((char*)array,sizeof(array))oileclose()}第章输入输出流在打开的文件尾添加数据将数组首地址强制类型转换若将主函数的array数组改为:chararray=“helloworld!”则write语句将变为:oilewrite(array,sizeof(array))无须强制类型转换文件的输入输出文件的输入输出读取文件如果读取的是标准数据类型的数据或字符串可以直接通过提取运算符(>>)将数据从输入文件流对象读取到程序的变量中。使用提取运算符提取数据时将以空白字符(如空格、Tab、回车)作为数据之间的分隔符因此这些空白字符不能被作为数据提取出来。如:char s int iifstream infile(“D:datatxt”,ios::in)infile>>s>>i第章输入输出流若文件中数据为:Hello!则s和i的数据分别为:“Hello!”、文件的输入输出文件的输入输出读取文件(续一)get函数:使用get函数可以从流对象中提取一个单个字符get函数弥补了提取运算符不能提取空白字符的缺点它能把任意字符包括空白符提取出来。get函数提取一个字符时有带形参和不带形参两种形式:如:char chch=cinget()   或:cinget(ch)若以上语句中调用get函数的是一个输入文件流对象则将从该流对象所关联的文件中提取出单个字符。第章输入输出流文件的输入输出文件的输入输出读取文件(续二)getline函数:用于从流对象中提取多个字符通常用于提取一行字符。get函数有三个形参。get函数的第一个形参:为字符型指针(char*)用于存放读出的多个字符通常传递的实参为字符数组。get函数的第二个形参:为整型用于指定本次读取的最大字符个数。get函数的第三个形参:为字符型默认值为回车符(‘n’)用于指定分隔字符作为一次读取结束的标志。第章输入输出流例读取文件E:boottxt中的内容并输出到屏幕上例读取文件E:boottxt中的内容并输出到屏幕上#include<fstreamh>#include<iostreamh>voidmain(){chararrayifstreamifs(“E:boottxt”,ios::nocreate)if(!ifs)return如果文件不存在打开不成功则结束程序while(!ifseof())eof函数用于判断是否到文件尾到文件尾返回True{ifsgetline(array,)表示每次读取字符的个数最多为个cout<<array<<endl}ifsclose()}第章输入输出流使用getline函数按行读取文件中的数据每次读取一行时遇回车符或达到最大字符个数则结束并将读出数据保存于数组array中。文件的输入输出文件的输入输出读取文件(续三)read函数:从流对象中提取整块数据到变量中主要用于提取数据到数组及自定义类型变量中。read函数的第一个形参:用于保存读出的数据类型为字符型指针(char*)与write函数中用法一致。read函数的第二个形参:用于指定读出多少个字节类型为整型。与write函数中用法一致。第章输入输出流例读取例中输出到文件“D:atxt”中的内容并将矩形参数显示到屏幕上例读取例中输出到文件“D:atxt”中的内容并将矩形参数显示到屏幕上#include<fstreamh>#include<iostreamh>voidmain(){CRectrifstreamifile(“D:atxt”)ifileread((char*)r,sizeof(r))将读出的数据保存到矩形对象r中ifileclose()rDraw()}第章输入输出流程序运行结果为:矩形左上角坐标为()矩形长和宽分别为矩形的颜色是red文件的输入输出文件的输入输出文件读写位置指针位置指针:用于保存在文件中进行读或写的位置。通过对位置指针的操作适当地调整读或写的位置可以实现对磁盘文件的随机访问。与ofstream对应的是写位置指针指定下一次写数据的位置。相关的操作函数为:seekp函数:用于移动指针到指定位置。tellp函数:用于返回指针当前的位置。与ifstream对应的是读位置指针指定下一次读数据的位置。相关的操作函数为:seekg函数:用于移动指针到指定位置。tellg函数:用于返回指针当前的位置。第章输入输出流文件的输入输出文件的输入输出文件读写位置指针(续)seekg函数的使用形式(seekp类似):seekg(n):用于移动指针到文件第n个字节后。seekg(n,ios::beg):从文件起始位置向后移动n个字节。seekg(n,ios::end):从文件结尾位置向前移动n个字节。seekg(n,ios::cur):从当前位置向前或向后移动n个字节。其中:n=,在指定位置n>,在指定位置向后移动n<,在指定位置向前移动。tellg函数的使用形式(tellp类似):streamposn=流对象tellg()streampos可看作整型数据返回值保存指针当前的位置。第章输入输出流例已知文件datatxt中存有个CRect对象的数据现要求读取最后一个对象把它的左上角坐标修改为()其他不变修改后写回到文件中去。例已知文件datatxt中存有个CRect对象的数据现要求读取最后一个对象把它的左上角坐标修改为()其他不变修改后写回到文件中去。#include<fstreamh>voidmain(){CRectrtifstreamifs(“datatxt”)ifsseekg(,ios::end)将指针移动到文件尾streamposlof=ifstellg()求得文件长度lofifsseekg(lof,ios::end)将指针移动到最后一条记录起始位置ifsread((char*)rt,sizeof(CRect))ifsclose()rtMove(,)ofstreamofs(“datatxt”,ios::ate)以ios::ate方式打开文件防止删除原来内容ofsseekp(lof,ios::end)将指针移动到最后一条记录起始位置ofswrite((char*)rt,sizeof(CRect))ofsclose()}第章输入输出流文件的输入输出文件的输入输出错误处理函数eof()如果输入流结束到文件尾则返回Truebad()如果出现一个严重的、不可恢复的错误如由于非法操作导致数据丢失、对象状态不可用等则返回True通常这种错误不可修复此时不要对流再进行IO操作fail()如果某种操作失败如打开操作不成功或不能读出数据或读出数据的类型不符等等则返回Truegood()如果以上三种错误均未发生表示流对象状态正常则返回True。以上函数可由流对象直接调用如:if(!infeof())如果没有到文件末尾if条件满足第章输入输出流文件的输入输出文件的输入输出关闭文件文件使用完毕后必须将其关闭才能断开流和对象之间的联系。文件关闭后还可以再次与流对象关联打开文件进行输入或输出操作。使用流对象的close函数可以完成关闭文件的操作close函数无形参调用形式为:流对象close()第章输入输出流输入输出文件流fstream输入输出文件流fstreamfstream类:对文件同时进行读写它将输入和输出流的功能集于一身。使用fstream打开文件的方法:fstreamiofile(“myfiledat”,ios::in|ios::out)注意:必须指定打开方式因为没有默认值。在使用fstream的对象读写文件时可以联合使用seekg和seekp函数对指针进行定位调整正确的读写位置。第章输入输出流例打开文件“E:myfiletxt”进行读写首先读出文件内容显示出来再将内容写入原文件结尾并将写入后的文件内容显示出来。例打开文件“E:myfiletxt”进行读写首先读出文件内容显示出来再将内容写入原文件结尾并将写入后的文件内容显示出来。#include<fstreamh>#include<iostreamh>voidmain(){fstreamiofile(“E:myfiletxt”,ios::in|ios::app)iofileseekg(,ios::end)定位至文件尾streamposlof=iofiletellg()获取文件长度char*datadata=newcharlof动态分配内存用于保存文件内容iofileseekg(,ios::beg)定位至文件头iofileread(data,lof)将文件内容读到data指向的内存中cout<<“原文件内容为:”<<endl第章输入输出流例(续)例(续)for(inti=i<lofi)cout<<datai逐个输出data指向内存中的字符cout<<endliofilewrite(data,lof)打开方式为ios::app,能将读出内容写入文件尾deletedataiofileseekg(,ios::end)lof=iofiletellg()data=newcharlofiofileseekg(,ios::beg)iofileread(data,lof)cout<<“读写操作后文件内容为:”<<endlfor(i=i<lofi)cout<<dataicout<<endliofileclose()deletedata}第章输入输出流程序运行结果为:原文件内容为:abcdefghi读写操作后文件内容为:abcdefghiabcdefghi谢谢!谢谢!

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/47

第10章 输入输出流

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利