C++面向对象程序设计项目教程(项目六)_第1页
C++面向对象程序设计项目教程(项目六)_第2页
C++面向对象程序设计项目教程(项目六)_第3页
C++面向对象程序设计项目教程(项目六)_第4页
C++面向对象程序设计项目教程(项目六)_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目六任务一

学习输入/输出的基础知识任务二

学习文件流的相关知识输入/输出流

传送数据的通道任务说明预备知识任务一

学习输入/输出的基础知识在本任务中,我们先来学习输入/输出的基础知识。一、关于输入/输出的基本概念二、标准输入/输出流一、关于输入/输出的基本概念C++不仅完全支持C的输入/输出系统,它还提供了自己的输入/输出系统,C++的输入/输出系统是以流的形式实现的。(一)流与缓冲区所谓流是指一连串连续不断的数据集合。C++的输入/输出流是由若干字节组成的字节序列,从输入设备流向内存的流为输入流,从内存流向输出设备的流为输出流。流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。系统在内存中为每一个数据信息流开辟一个内存缓冲区,用来存放流中的数据。在输入时,从键盘输入的数据先存放在键盘缓冲区中,按回车键后,数据从键盘缓冲区传送到程序的输入缓冲区,然后用提取运算符“>>”从输入缓冲区内提取数据送给程序中的有关变量。在输出时,先将数据送到程序的输出缓冲区保存,直到缓冲区满或遇到endl,用插入运算符“<<”将输出缓冲区内全部数据送到显示器显示出来。数据流输入/输出过程如图所示。(二)输入/输出流类C++编译系统提供了用于输入/输出的iostream类库,其中包含了许多用于输入/输出的类和流类,可以实现不同的功能。I/O类库中的常用流类如表所示。ios是流类库的虚基类,由它派生出istream类和ostream类,istream类和ostream类通过多重继承又派生出iostream类。istream类提供输入操作,ostream提供输出操作,iostream类提供输入和输出操作。其继承层次关系如图所示。由于不同类的声明被放在不同的头文件中,因此,用户在程序中使用这些类时,需要用#include命令将有关的头文件包含进来。常用的头文件有:iostream:包含对输入/输出流进行操作所需的基本信息,定义的类有ios,istream,ostream,iostream,istream_withassign,ostream_withassign,iostream_witassgin等。fstream:用于文件流的I/O操作。strstream:用于字符串流的I/O操作。stdio:定义输入/输出函数。iomanip:用于对I/O流进行格式控制。二、标准输入/输出流C++的输入/输出流库中定义了4个标准流对象,如表所示。(一)标准输入流对象cincin是istream的派生类istream_withassign的对象,它从标准输入设备(键盘)获取数据,称为标准输入流。程序中的变量通过流提取运算符“>>”从流中提取数据。对于cin,有以下几点说明:(1)只有在按回车键后,当前行数据才会被送入键盘缓冲区,形成输入流,提取运算符“>>”才会从中提取出数据。(2)使用“>>”提取数据时,系统会跳过输入流中的空格、制表符、换行符等空白字符,然后读入后面的与变量类型相对应的值。因此,给一组变量输入值时,可用空格或换行符将键入的数据间隔开。例如:intx1;floatx2;cin>>x1>>x2;输入数据时可采用如下几种方式:2356.9(使用空格分隔数据)或23 56.9(使用制表符分隔数据)或2356.9(通过按回车键换行分隔数据)(3)输入字符串(即类型为字符数组或字符指针变量)时,提取运算符“>>”将跳过空白符,然后读入非空白字符,并且直到遇到另一空白符为止。读取结束后,系统会在字符串的串尾放一个字符串结束标志’\0’。例如:charstr[50];char*str1=str;cin>>str1;当键入的字符串为:Areyouready?则str1中的字符串为“Are”,后面的内容均被忽略。(4)输入数据时,系统除了会检查空白符外,还会检查输入数据与变量的匹配情况。例如,对于语句:cin>>i>>x; //i为int型,x为float型若从键盘输入:56.7832.8得到的结果为:i=56x=0.78(二)输入流的成员函数在C++中,除了可以用cin流输入标准类型的数据外,还可以用流的成员函数实现字符的输入。下面简单介绍几个常用的成员函数。1.get函数get函数有3种形式:①不带参数的get函数调用形式为:cin.get();其作用是从输入流中提取一个字符(包括空白字符),并返回读入的字符。当遇到输入流中的文件结束符时,返回文件结束标志EOF(EOF是在iostream头文件中定义的符号常量,一般用-1表示)。【例6-1】

不带参数的get函数的应用示例。#include<iostream.h>voidmain(){charch;cout<<"EOF="<<EOF<<endl;cout<<"请输入一串字符:";while((ch=cin.get())!=EOF) //循环读取字符,直至换行后按【Ctrl+Z】组合键和回车键cout<<ch;}程序运行结果如图所示。②有一个参数的get函数调用形式为:cin.get(ch);其作用是从输入流中读取一个字符,并存入字符变量ch。若读取成功则返回非0值,否则返回0(遇到文件结束符EOF)。通常将其作为循环语句的判断条件,例如:#include<iostream.h>voidmain(){charch;cout<<"请输入一串字符:";while(cin.get(ch))//get函数作循环条件,若读取成功则执行循环cout<<ch;}程序运行结果如图所示。【例6-2】

有一个参数的get函数应用示例。将【例6-1】作如下修改。③有3个参数的get函数调用形式为:cin.get(字符数组(或字符指针),字符个数n,终止字符);其作用是从输入流中读取字符直到终止字符或者读取n-1个字符,赋给指定字符数组(或字符指针指向的数组)。若读取成功则返回非0值,否则返回0。例如:charch[14];cin.get(ch,5,'\n');此时若输入abcdefg,则输出结果为abcd。【例6-3】

有3个参数的get函数应用示例。#include<iostream.h>voidmain(){chararr[28];cout<<"请输入一串字符:";cin.get(arr,18,'\n');//读取输入字符串的前17个字符,或者读到结束标志cout<<arr<<endl;}程序运行结果如图所示。2.getline函数调用getline函数的一般形式为:cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)其作用与带3个参数的get函数类似,即从输入流中读取字符直到终止字符或者读取n-1个字符,赋给指定字符数组(或字符指针指向的数组)。【例6-4】getline函数应用示例。#include<iostream.h>voidmain(){charch0[30],ch1[30],ch2[40];cout<<"请输入第一个字符串:";cin>>ch0; //第一个输入语句cout<<"请输入第二个字符串:";cin.getline(ch1,30); //第二个输入语句cout<<"请输入第三个字符串:";cin.getline(ch2,40,'*'); //第三个输入语句cout<<"在屏幕上分别显示输入的三个字符串:"<<endl;cout<<"第一个:"<<ch0<<endl;cout<<"第二个:"<<ch1<<endl;cout<<"第三个:"<<ch2<<endl;cout<<"程序结束"<<endl;}程序运行结果如图所示。(三)标准输出流对象标准输出流是从内存流向标准输出设备(显示器)的数据流。预定义标准输出流对象主要包括cout、cerr和clog。1.cout流cout是ostream的派生类ostream_withassign的对象,它向标准输出设备(终端显示器)输出数据,称为标准输出流。程序中的变量通过流插入运算符“<<”向cout流中顺序插入数据。cout流在内存中开辟了一个输出缓冲区,用于存放cout流中的数据。当向流中插入一个endl时,不论缓冲区是否已满,均立即输出流中所有数据,然后插入一个换行符,并清空缓冲区。如果插入一个换行符'\n',则只输出并换行,不清空缓冲区。2.cerr流cerr向标准出错设备(显示器)输出有关出错信息,称为标准出错流。cerr与cout的作用和用法类似,不同的是cout流可以传送到显示器输出,也可以被重定向输出到磁盘文件,而cerr流只能在显示器输出。3.clog流clog流也是标准出错流,其作用与cerr相同,都是向显示器输出出错信息。它们的区别在于cerr没有缓冲区,它直接向显示器输出信息,而clog先将信息放入缓冲区中,当缓冲区满或遇到endl时再向显示器输出信息。【例6-5】cout、cerr和clog流应用示例。#include<iostream.h>#include<math.h>voidmain(){charch[10];inta,b;cin>>ch; //标准输入流cout<<ch<<endl; //标准输出流cin>>a>>b;if(a<b){cerr<<"cerr"<<endl; //标准出错流cerrclog<<"clog"<<endl; //标准出错流clog}}程序运行结果如图所示。4.输出流的成员函数在程序中通常使用cout和插入运算符“<<”实现输出,有时需要输出单个字符也可以使用流成员函数put()。其调用形式为:cout.put(参数);其中,参数可以是字符或字符的ASCII码值。例如:cout.put('D');//在屏幕上输出字母Dcout.put(68);//输出ASCII码为68的字符另外,也可以在一个语句中连续调用put函数,实现字符串的输出。例如:cout.put('D').put('a').put('n').put('c').put('e');输出结果为Dance。【例6-6】

输出流的成员函数应用示例。#include<iostream.h>voidmain(){charch[5];cin>>ch; //输入一个字符数组for(inti=4;i>=0;i--) //从最后一个字符开始输出cout.put(ch[i]);}程序运行结果如图所示。(四)输入/输出的格式控制在编写程序时,有时会要求按照指定的格式输入数据或输出结果,此时可以使用格式控制符或流对象的有关格式控制的成员函数来实现。1.使用格式控制符进行格式控制C++中的格式控制符如表所示,它们可以被嵌入到输入/输出语句中控制输入/输出的格式。【例6-7】

格式控制符应用示例。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){inta;cout<<"请输入一个整型数据:";cin>>a;cout<<"十六进制输出:"<<hex<<a<<endl; //十六进制输出cout<<"八进制输出:"<<setbase(8)<<a<<endl; //八进制输出cout<<setfill('*')<<setw(10)<<dec<<a<<endl; /*十进制输出,宽度为10,不满的填充字符**/cout<<setiosflags(ios::left)<<setw(10)<<a<<endl; //以后的数据输出都会左对齐doubled;cout<<"请输入一个浮点数据:";cin>>d;cout<<d<<endl; //默认输出小数为6位cout<<setprecision(9); //设置浮点数位数为9位cout<<d<<endl; cout<<setiosflags(ios::scientific)<<d<<endl; //以科学计数法形式输出cout<<resetiosflags(ios::scientific); //取消科学计数法格式设置cout<<d<<endl;char*str="WelcometoC++";cout<<setw(20)<<str<<endl;//输出20位,左对齐,不满的填充字符*}程序运行结果如图所示。2.使用成员函数进行格式控制通过调用流对象cout中有关格式控制的成员函数也可以控制输出格式,用于格式控制的常用成员函数如表所示。格式标志在类ios中被定义为枚举值,因此在引用它们时需要在前面加上类名ios和作用域限定符“::”。常用的格式标志如下页表所示。【例6-8】

使用成员函数进行格式控制的应用示例。#include<iostream.h>voidmain(){cout.fill('*'); //设置填充字符为*cout.width(10); //设置显示宽度为10cout<<255<<endl;cout.unsetf(ios::dec); //取消十进制显示cout.setf(ios::hex); //设置十六进制显示cout<<255<<endl;cout.unsetf(ios::hex); //取消十六进制显示cout.setf(ios::left); //左对齐显示数据cout<<255<<endl;cout.unsetf(ios::left); //取消左对齐显示cout.width(10); //设置显示宽度为10cout.setf(ios::showpos); //输出正数时显示“+”号cout.setf(ios::internal); //左显示符号,中间填充字符,右显示数据cout<<255<<endl;cout.unsetf(ios::showpos); //取消显示“+”号cout<<123.456782<<endl; //默认显示精度为6cout.precision(8); //设置输出精度为8cout<<123.456782<<endl;cout.setf(ios::scientific); //将数据按科学计数法输出cout.precision(6); //表示小数点后数字位数为6cout<<123.456782<<endl;cout.unsetf(ios::scientific); //取消科学计数法输出cout.setf(ios::fixed); //将数据按定点小数输出cout<<123.4567<<endl;}程序运行结果如图所示。(五)流运算符的重载流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,在头文件“iostream.h”中已经对其进行了重载,使之能用来输出和输入C++标准类型的数据。而用户自定义类型的数据,是不能直接用“<<”和“>>”来输出和输入的。要想使用它们输出和输入自定义类型的数据,必须对它们重载。流插入运算符重载的一般形式为:ostream&operator<<(ostream&形参1,自定义类型&形参2)流提取运算符重载的一般形式为:istream&operator>>(istream&形参1,自定义类型&形参2)【例6-9】

重载流运算符“<<”和“>>”应用示例。#include<iostream.h>classComplex{public:Complex();friendostream&operator<<(ostream&out,Complex&c);//声明流插入运算符“<<”重载函数friendistream&operator>>(istream&in,Complex&c);//声明流提取运算符“>>”重载函数private:doublereal; //实部doubleimag; //虚部};

Complex::Complex(){real=0;imag=0;}ostream&operator<<(ostream&out,Complex&c) //定义重载运算符“<<”函数{out<<c.real<<"+"<<c.imag<<"i";returnout;}istream&operator>>(istream&in,Complex&c) //定义重载运算符“>>”函数{cout<<"实部:";in>>c.real;cout<<"虚部:";in>>c.imag;returnin;}voidmain(){Complexm,n;cout<<"请分别输入两个复数"<<endl;cin>>m>>n;cout<<"复数1为:";cout<<m<<endl;cout<<"复数2为:"<<n<<endl;}程序运行结果如图所示。任务实施——求解一元二次方程案例说明案例分析首先,根据a和b2-4ac的值判断该一元二次方程是否有解,若有解,则根据通解公式求出两个根并输出;若无解,则输出出错信息。实施步骤步骤1在VisualC++中新建一个C++源文件,根据分析编写代码如下:#include<iostream.h>#include<math.h>intmain(){floata,b,c,disc;for(inti=0;i<3;i++){cout<<"pleaseinputa,b,c:";cin>>a>>b>>c;if(a==0)cerr<<"acannotbezero!"<<endl; //将出错信息插入cerr流,在屏幕上输出elseif((disc=b*b-4*a*c)<0)cerr<<"b*b-4*a*ccannotbesmallerthanzero,nosolution!"<<endl;else{cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;}}return0;}步骤2程序运行结果如图所示。任务二

学习文件流的相关知识任务说明文件是程序设计中的一个重要概念。所谓文件,通常是指存储在外部介质上的数据集合。例如,人们经常使用的Word文档、图片、应用程序等都是文件。预备知识一、文件的特点二、文件流类和流对象三、文件的打开与关闭四、文件的读写操作五、文件指针的使用一、文件的特点根据文件中数据的组织形式不同,文件可分为ASCII文件和二进制文件。ASCII文件又称文本文件或字符文件,它的每个字节放一个ASCII代码,表示一个字符。二进制文件又称内部格式文件或字节文件,它是将数据按照其在内存中的存储形式原样输出到磁盘上存放。对于字符数据,由于它在内存中是以ASCII码形式存放的,因此无论是以ASCII文件输出还是二进制文件输出,其数据形式是一样的。但对于数值数据,二者的输出是不同的,如图所示。二、文件流类和流对象文件流是以磁盘文件为输入/输出对象的数据流。输入文件流是从磁盘文件流向内存的数据,输出文件流是由内存流向磁盘文件的数据,每个文件流都有一个内存缓冲区与之对应。下图形象地表示了文件流的输入和输出。C++中提供了ifstream、ofstream和fstream三个文件流类,用来处理磁盘文件的输入/输出操作,它们的功能如下:ifstream:输入流类,由istream派生来,用于从磁盘文件输入数据。ofstream:输出流类,由ostream派生来,用于向磁盘文件输出数据。fstream:输入/输出流类,由iostream派生来,用于磁盘文件的输入/输出。三、文件的打开与关闭在进行文件的读写操作之前,需要为文件流对象和目标磁盘文件建立关联,使文件流流向指定的磁盘文件,并指定文件的工作方式,即打开文件。操作文件结束后,必须关闭文件,即将文件流与磁盘文件的关联断开,否则可能导致数据丢失。1.文件的打开方法在C++中,可以调用文件流的成员函数open()实现文件的打开,它定义在头文件fstream中,原型为:voidopen(constchar*,intopen_mode,intaccess=filebuf::openprot);其中,第一个参数为将要打开的文件路径和文件名;第二个参数指定文件打开的方式(输入/输出方式);第三个参数指定文件的访问方式,默认为filebuf::openprot(以共享/保护打开文件)。其调用的一般形式为:文件流对象.open(文件名,输入/输出方式);例如:ofstreamout; //定义ofstream类对象outout.open("outfile.txt",ios::out);/*打开磁盘文件outfile.txt,并指定它为输出文件,文件流对象out将向磁盘文件outfile.txt输出数据*/输入/输出方式是在基类ios类中定义的枚举常量。表中给出了文件输入/输出方式的设置值。在C++中,还可以用构造函数打开文件,即在声明文件流类时定义带参数的构造函数。例如:ostreamout("outfile.txt",ios::out);2.文件的关闭方法要关闭文件,可以调用文件流的成员函数close(),其调用形式为:文件流对象名.close();关闭了该磁盘文件之后,才可以将文件流与其他磁盘文件建立关联,对新的文件进行输入/输出。例如:ofstreamout; //建立输出流对象out.open("outfile.txt",ios::out); //输出文件流与outfile.txt建立关联out.close(); //将输出文件流所关联的磁盘文件关闭out.open("outfile_another.txt",ios::out); //输出文件流与outfile_another.txt建立关联【例6-10】

文件的打开与关闭应用示例。假设当前目录下存在文件“aa.txt”,打开该文件并进行读写操作,操作完后关闭该文件。#include<fstream.h>voidmain(){ofstreamout; //创建输出流对象out.open("aa.txt",ios::nocreate); //打开文件if(!out) //打开失败cout<<"文件不存在,打开失败!"<<endl;else //打开成功{cout<<"文件已打开,可以进行读写操作!"<<endl;out<<"HelloWorld!“;}out.close(); //关闭文件cout<<"文件已关闭!"<<endl;}程序运行结果如图所示。四、文件的读写操作1.对ASCII文件的操作对于ASCII文件,可以通过文件流对象和流插入运算符“<<”及流提取运算符“>>”实现对磁盘文件的读写,与cin和cout的使用方法相同。另外,使用前面介绍的的文件流的get()、getline()、put()等成员函数也可以实现字符的输入/输出。【例6-11】ASCII文件操作应用示例。将当前目录下源文件“a.txt”中的内容输出到目标文件“b.txt”中。#include<iostream.h>#include<fstream.h>voidmain(){fstreaminf,ouf; //定义流对象charffn[20]="a.txt",dfn[20]="b.txt",ch[10]; //定义字符串变量存放文件名cout<<"源文件名:";cout<<ffn<<endl;cout<<"目标文件名:";cout<<dfn<<endl;inf.open(ffn,ios::in); //以输入的方式打开源文件if(!inf) //打开源文件失败{cerr<<"打开文件a.txt失败!"<<endl;return; }else //打开源文件成功{cout<<"打开文件a.txt成功!"<<endl;cout<<"可以对文件a.txt进行读操作!"<<endl;}ouf.open(dfn,ios::out); //以输出的方式打开目标文件for(inti=0;i<10;i++) {inf>>ch[i];//从源文件读入10个字符顺序存放在字符数组ch中ouf<<ch[i];//将字符数组ch中的10个字符写入目标文件中}inf.close(); //关闭源文件cout<<"关闭文件a.txt!"<<endl;ouf.close(); //关闭目标文件cout<<"关闭文件b.txt!"<<endl;}程序运行结果如图所示。2.对二进制文件的操作二进制文件与ASCII文件存储数据的方式有所不同,它将内存中数据直接保存到磁盘文件中。由于文件中的信息以二进制形式存储,故这种文件又称字节文件。对二进制文件进行读写操作时,需要首先在打开文件时用ios::binary指定以二进制形式操作文件,然后可通过使用istream类的成员函数read()和ostream类的成员函数write()具体实现读写操作。其函数原型为:istream&read(char*buffer,intlen);ostream&write(constchar*buffer,intlen);

其中,第一个参数buffer指向内存中存放数据的缓冲区,第二个参数说明要读出或写入数据的字节数。两个函数的作用分别是:从流中读出长度为len的数据存入buffer指向的缓冲区,从buffer所指向的缓冲区把长度为len的数据写到相应的流中。其调用的一般形式为:输入流对象名.read(指针变量名,读写的字节数);输出流对象名.write(指针变量名,读写的字节数);

例如:istreaminf;inf.read(p1,20);表示从inf所关联的文件中读入20个字节,存放在起始地址为p1的一段内存中。ostreamouf;ouf.write(p2,sizeof(int));表示从起始地址为p2的缓冲区中,将长度为sizeof(int),即4个字节的数据,写入到与ouf所关联的文件中。【例6-12】

二进制文件操作示例。将内存中的数据以二进制形式存入文件,然后从文件中读出该数据并将其显示在屏幕上。#include<iostream.h>#include<fstream.h>voidmain(){shorti=50;ofstreamouf("f:\\tmp.txt",ios::binary);//用构造函数以二进制形式打开输出文件if(!ouf) //打开文件失败{cerr<<"openerror!"<<endl;return;}ouf.write((char*)(&i),sizeof(i)); //以二进制形式写入iouf.close(); //关闭文件cout<<i<<endl;ifstreaminf; //创建输入流文件inf.open("f:\\tmp.txt",ios::binary);//用成员函数以二进制形式打开输入文件程序运行结果如图所示。if(!inf) //打开文件失败{ cerr<<"openerror!"<<endl;return;}shortk;inf.read((char*)(&k),sizeof(k)); //将文件中内容读入kinf.close(); //关闭文件cout<<k<<endl;}五、文件指针的使用前面介绍的对文件的读写操作,都是按一定顺序对文件中的数据逐个进行访问,称为顺序读写。但对于二进制文件,C++还提供了文件的随机读写。磁盘文件中有一个用来指示当前位置的文件指针,每读入一个字节,指针就后移一个字节。通过对文件指针的控制,使用户可以随机访问二进制文件中任意位置上的数据。与文件指针有关的成员函数如表所示。“文件中的位置”和“位移量”、“参照位置”均以字节为单位。其中,“文件中的位置”表示指针在文件中的位置,“参照位置”表示文件指针的起始位置,“位移量”表示相对于起始位置的位移量,用“+”和“-”表示指针的前后移动,省略时为向前移动。“参照位置”的取值有以下三种:ios::beg:文件开头,为默认值ios::cur:指针当前位置ios::end:文件末尾例如:ouf.seekp(-278);//输出文件中的指针向后移到278字节位置inf.seekg(30,ios::cur); //输入文件中指针从当前位置前移30个字节inf.seekp(45,ios::end); //输出文件中指针从文件末尾前移45个字节【例6-13】

文件指针应用示例。二进制文件的随机读写。#include<iostream.h>#include<fstream.h>#include<string.h>voidmain(){fstreamfile("a.txt",ios::in|ios::out); //以输入/输出方式打开文件charstr[]="GoodMorning!";charch;file.write(str,strlen(str)); //将字符串写入文件file.seekg(5,ios::beg); //指针从文件开头前移5个字节while(!file.eof()) //读取数据,直至文件末尾{file.get(ch);cout<<ch;}cout<<endl;file.seekg(8); //指针移到绝对位置8字节处cout<<file.rdbuf()<<endl; //输出当前位置开始的字符file.close(); //关闭文件}程序运行结果如图所示。任务实施——三角函数值的写入与读出案例说明编写一个程序,创建一个结构体类型,其成员为x、sin(x)、cos(x)和tan(x),其中x的取值为10、20…100,以二进制形式将其存入磁盘文件中,然后再将其读出并输出到屏幕上,输出时数据的宽度为10,并保持左对齐。案例分析首先设计结构体类型,将数据存入定义的结构体数组中。然后,以二进制形式打开想要写入数据的文件,将结构体数组的值写入,关闭文件。再次打开想要读取数据的文件,将文件中的数据存入一个临时结构体数组中,最后使用标准输出流对象将该结构体数组中的数据成员向显示器输出,同时要使用格式控制符设置输出数据的格式。实施步骤步骤1在VisualC++中新建一个C++源文件,根据分析编写代码如下:#include<iostream.h>#include<math.h>#include<fstream.h>#include<iomanip.h>structelem //定义结构体{doublex;doubles;doublec;doublet;}test[10];intmain(){inti,n;for(i=10;i<=100;i+=10){n=i/10-1;test[n].x=i; test[n].s=sin(i); test[n].c=cos(i); test[n].t=tan(i);}ofstreamouf("data.txt",ios::out|ios::binary); //以二进制输出形式打开文件ouf.write((char*)&test,10*sizeof(elem)); //将test的值写入文件ouf.close(); //关闭文件ifstreaminf; //创建输入文件流对象inf.open("data.txt",ios::in|ios::binary);//以二进制输入形式打开文件if(!inf.is_open()) //打开文件失败{cerr<<"Can'topendata.txt!"<<endl;return0;}elemtemp[10];cout.setf(ios::left); //设置左对齐输出for(i=0;i<10;i++){inf.read((char*)&temp[i],sizeof(elem)); //将文件中的数据读入temp中cout<<"x="<<temp[i].x //向显示器输出从文件中读出的内容<<"sin("<<temp[i].x<<")="<<setw(10)<<temp[i].s<<"cos("<<temp[i].x<<")="<<setw(10)<<temp[i].c<<“tan("<<temp[i].x<<")="<<setw(10)<<temp[i].t<<endl;}inf.close(); //关闭文件return0;}步骤2程序运行结果如图所示。项目拓展二进制文件的应用实例【例6-14】

二进制文件应用示例(一)。/*****************************************************************将用户信息(姓名和年龄)写入到二进制文件inout_bifile.txt中*****************************************************************/#include<iostream.h>#include<fstream.h>intmain(){charfilename[81]; //用来存放指定的文件名intn; //用来存放用户记录的记录号charname[20]; //用来存放用户的姓名intage; //用来存放用户的年龄charyes;//计算记录大小,以便决定一条记录在文件中占用的空间大小intrecsize=sizeof(name)+sizeof(int);cout<<"请在此输入文件的名:";cin>>filename; //输入文件名称,最大80个字符fstreamfbin(filename,ios::binary|ios::in|ios::

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论