版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
13输入输出流21、静念园林好,人间良可辞。22、步步寻往迹,有处特依依。23、望云惭高鸟,临木愧游鱼。24、结庐在人境,而无车马喧;问君何能尔?心远地自偏。25、人生归有道,衣食固其端。13输入输出流13输入输出流21、静念园林好,人间良可辞。22、步步寻往迹,有处特依依。23、望云惭高鸟,临木愧游鱼。24、结庐在人境,而无车马喧;问君何能尔?心远地自偏。25、人生归有道,衣食固其端。第13章输入输出流13.1C++的输入输出13.2标准输出流13.3标准输入流13.4文件操作与文件流13.1C++的输入和输出(I/O)输入和输出,要看以什么为对象——以标准I/O设备为对象从键盘、鼠标得到的数据是进入内存的,该数据是输入数据。将数据从内存送到显示器、打印机等,该数据是输出数据。以外存磁盘文件为对象内存中的数据存储到磁盘文件中,叫输出文件;从磁盘文件中的数据装载入内存中,叫输入文件。以内存中指定的空间作为对象常指定一个字符数组作为存储空间,这种I/O称为字符串的输入输出。C++采取不同的方法实现以上三种I/O。标准I/O文件I/O串I/O类的定义类是一种复杂的数据类型它是将不同类型的数据和与这些数据相关的运算封装在一起的集合体。它使类中的数据得到很好的“保护”,在大型程序中不会被随意修改。在C++中,结构体类型只是类的一个特例实例化圆类数据成员
半径成员函数
置半径值 求周长
求面积类的变量即为对象。对象是类的实例C++的各种I/O流类库C++为实现数据的I/O定义了一个庞大的类库。它包括的类主要有——C++I/O类库中的其他类包含头文件在一个程序中包含一个头文件的命令格式为——#include<头文件名>常用的I/O类库有I/O操作类型必须包含的头文件需要进行标准I/O操作iostream需要进行文件I/O操作fstream需要进行串I/O操作strstream使用格式化I/Oiomanip在iostream中定义的4个流对象——cin,cout,cerr,clog对象含义对应设备对应的类cin标准输入流键盘istream_withassigncout标准输出流显示器ostream_withassigncerr或clog标准错误流13.2标准输出流
标准输出流——流向标准输出设备(显示器)的数据cout流对象——在控制台(显示器)输出用流插入运算符“<<”向cout输出数据.如:
cout<<“a=”<<a<<endl;
cout<<数据1<<数据2<<数据3;cerr流对象——在控制台(显示器)输出错误信息用流插入运算符“<<”向cerr输出数据.如:cerr<<“除数为0,出错!”<<endl;cerr的用法与cout类似.cout流对象与cerr流对象的不同之处cout的输出默认是显示器,但可以被重定向为输出到磁盘文件cerr只能定向输出到显示器
例13.1解一元二次方程ax2+bx+c=0的解voidmain(){floata,b,c,disc;
cout<<“输入a,b,c:”;cin>>a>>b>>c;if(a==0)cerr<<“a=0,不是二次方程,出错!”<<endl;else{disc=b*b-4*a*c;if(disc<0)cerr<<“二次方程无实根。”<<endl;else{cout<<“x1=”<<(-b+sqrt(disc))/(2*a)<<endl;
cout<<“x2=”<<(-b-sqrt(disc))/(2*a)<<endl;}}}标准输出流标准输出流——流向标准输出设备(显示器)的数据clog流对象——在控制台(显示器)输出错误信息.用流插入运算符“<<”向clog输出数据.如:clog<<“除数为0,出错!”<<endl;clog的用法与cerr类似.clog流对象与cerr流对象的不同之处cerr是不经过缓冲区,直接向显示器输出有关信息。clog的输出先存储在缓冲区,遇到缓冲区满或遇到endl时才向显示器输出。使用控制符控制格式输出控制符作用dec设置整数的基数为10hex设置整数的基数为16oct设置整数的基数为8setfill(c)设置填充字符csetprecision(n)设置实数的显示精度为n位setw(n)设置字段宽度为nsetiosflags(ios::fixed)实数以固定的小数位数显示#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){inta;cout<<“inputa:”;cin>>a;//a=34cout<<“dec:”<<dec<<a<<endl;cout<<“hex:”<<hex<<a<<endl;cout<<“oct:”<<oct<<a<<endl;cout<<setfill(‘*’)<<setw(10)<<dec<<a<<endl;}例13.2用控制符控制输出格式dec:34hex:22oct:42********34用流对象的成员控制格式输出说明:cout.width(n)与格式控制符setw(n)相似cout.fill(c)与格式控制符setfill(c)相似13.3标准输入流标准输入流——从标准输入设备(键盘)流向程序的数据.
cin流对象
int
a,b;
cin>>a>>b;//从键盘输入2个整数当输入时遇到无效的字符或遇到文件结束符ctrl+z时
cin处于出错状态,无法正常提取数据(cin=false).if(!cin)
cout<<“输入出错”;21abc↙用于字符输入的流成员函数不带参数的get函数
cin.get()
功能——从输入流提取1个字符;函数返回值就是该字符.若遇到文件结束符,则返回值为EOF,即-1.如:charch;
while((ch=cin.get())!=EOF)
cout.put(ch);
键盘输入:
显示:
键盘输入:IstudyC++.
(程序结束)IstudyC++.↙Ctrl+ZEOF——EndOfFile字符输出的流成员函数,功能——在显示器上显示一个字符用于字符输入的流成员函数2.带1个参数的get函数cin.get(ch)
功能——从输入流提取1个字符放入ch;
函数返回值就是非0值若遇到文件结束符,则返回值为0如:charch;
while(cin.get(ch)!=0)
cout.put(ch);
键盘输入:
显示:
键盘输入:IstudyC++.(程序结束)IstudyC++.↙Ctrl+Z用于字符输入的流成员函数3.带3个参数的get函数
cin.get(字符数组,字符个数n,终止字符)或
cin.get(字符指针,字符个数n,终止字符)功能——从输入流提取n-1个字符放入数组;
函数返回值就是非0值若遇到文件结束符,则返回值为0如charstr[20];cin.get(str,10,“\n”);cout<<str;
键盘输入:
显示:
IstudyCIstudyC++.↙用于字符输入的流成员函数4.cin.getline函数——可输入一行字符
cin.getline(字符数组,字符个数n,终止字符)或
cin.getline(字符指针,字符个数n,终止字符)功能——从输入流提取n-1个字符放入数组;
函数返回值就是非0值若遇到文件结束符,则返回值为0如charstr[20];cin.get(str,10,“\n”);cout<<str;
键盘输入:
显示:
IstudyCIstudyC++.↙cin.get()与cin.getline()的比较
cin.get(字符数组,字符个数n,终止字符)cin.getline(字符指针,字符个数n,终止字符)相同之处:从输入流提取n-1个字符放入数组,函数返回值是非0值.若遇到文件结束符,则返回值为0.不同之处:当读到终止字符时,cin.getline()——将指针移到终止字符之后。cin.get()——将指针移到终止字符处。则下次继续读取时的位置就不同。13.4文件操作与文件流文件
存储在某种设备(磁带、光盘、软盘或硬盘)上数据的集合;对用户来说,文件分成两大类:
程序文件
数据文件从文件中数据的组织形式来分:
ASCII文件(文本文件)
二进制文件文本文件和二进制文件文本文件(ASCII文件):文件中的内容都是字符,以ASCII码形式存在文件内.如:12345在文本文件中是以‘1’,’2’,’3’,’4’,’5’共5个字符形式存储的二进制文件:文件中的内容是以数据的二进制形式存储的.如:12345在二进制文件中按1个整数类型以二进制形式存储,占4个字节空间文件流
C++在头文件fstream.h中定义了C++的文件流类体系,当程序中使用文件时,要包含头文件fstream.h。iosifstream(输入流)ofstream(输出流)fstream在“fstream.h”中说明当使用文件时,在程序头有:#include<fstream>其中定义了各种文件操作运算符及函数。文件流用标准流进行I/O时,系统自动地完成数据类型的转换。对于输入流,要将输入的字符序列形式的数据变换成计算机内部形式的数据(二进制或ASCII)后,再赋给变量,变换后的格式由变量的类型确定。对于输出流,将要输出的数据变换成字符串形式后,送到输出流(文件)中。内存变量(程序)键盘输入文件屏幕输出文件cin>>xcout<<xinfile>>xoutfile<<x程序对文本文件的操作与对键盘、显示器的操作比较:在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件的语句。C++角度的输入和输出流充当了程序和流源或流目标之间的桥梁;使得C++程序可以以相同的方式对待来自键盘的输入和来自文件的输入;同理,通过使用流,C++程序处理输出的方式将独立于其去向;内存变量(程序)键盘输入文件屏幕输出文件cin>>xcout<<xinfile>>xoutfile<<x简单的文件I/O要让程序将数据写入文件,必须:创建一个ofstream对象来管理输出流;将该对象与特定的文件关联起来;以使用cout的方式使用该对象,唯一的区别是:输出将进入文件,而不是屏幕;#include<fstream>
//必须包含的头文件
usingnamespacestd;voidmain(){inta=12,b=34;
ofstreamfout;
//定义ofstream类对象fout
fout.open("c:\\c_05\\temp\\test.dat",ios::out);//使文件流与test.dat建立关联fout<<a<<endl;fout<<b<<endl;
fout.close();//将输出文件流所关联的磁盘文件关闭}例将inta=12,b=34写到磁盘文件中读取文件#include<fstream>usingnamespacestd;voidmain(){inta,b;
ifstreaminfile;
infile.open("c:\\c_05\\temp\\test.dat",ios::in);
infile>>a>>b;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;
infile.close();}文本文件的打开与关闭在文件操作前,需要将程序与被操作的文件联系起来,使程序可以“引用”文件。在程序内定义一个文件类的对象,由该对象与文件发生联系,程序内所有的与文件的操作都是对该对象的操作。
fstreaminfile,outfile;
定义两个对象,可以联系两个输入输出文件
ifstreaminfile;
定义一个对象只能联系输入文件
ofstreamoutfile;
定义一个对象只能联系输出文件iosifstream(输入流)ofstream(输出流)fstream在“fstream.h”中说明定义用于输入的文件对象定义用于输出的文件对象定义用于输入输出的文件对象文件对象与包含文件头的关系文件的打开与关闭如何使文件类的对象与欲操作的文件发生联系?用对象打开文件方法一:
ofstream
outfile;
//定义输出文件类对象
outfile.open(“d:\\mydoc\\a1.dat”);
格式:文件流对象.open(文件名)方法二:定义对象时直接初始化ofstreamoutfile(“d:\\mydoc\\a1.dat”);打开文件“a1.dat”用于输出,并将此文件与输出文件类对象outfile建立联系今后在程序中,用到文件“a1.dat”的地方就用outfile来代替。文件的打开在打开文件后,都要判断打开是否成功——若打开成功,则文件流对象值为非零值;若打开不成功,则其值为0。
ifstreampfile1;//定义输入文件类对象ofstreampfile2;//定义输出文件类对象pfile1.open(“file1.txt”);pfile2.open(“file2.txt”,);if(!pfile1)//若为0,打开文件操作失败
{cerr<<”不能打开输入文件:file1.txt”<<endl;exit(1);}if(!pfile2){cerr<<”不能打开输出文件:file2.txt”<<endl;exit(1);}打开输入文件时,文件必须存在打开输出文件时,若文件不存在,则建立文件;若文件存在,则删除原文件的内容,使其成为一个空文件。将文件类对象看成键盘和显示器即可。ifstreaminfile;//定义输入文件类对象infile.open(“myfile1.txt”);//利用函数打开某一文件floatx,y;infile>>x>>y;myfile1.txt34内存infilexy34用infile代替myfile1.txt进行操作。如何从文件中读出数据?ifstreamoutfile;//定义输出文件类对象infile.open(“myfile2.txt”);//利用函数打开某一文件floatx=3,y=4;outfile<<x<<‘\t’<<y<<endl;myfile2.txt内存outfilexy34用outfile代替myfile2.txt进行操作。34如何把数据写到文件?ifstreaminfile;ofstreamoutfile;infile.open(“myfile1.txt”);outfile.open(“myfile2.txt”);floatx,y;infile>>x>>y;outfile<<x<<‘\t’<<y<<endl;infile.close();outfile.close();myfile1.txt34内存infilexy34myfile2.txtoutfile34infile.close();outfile.close();用完文件后,使用成员函数关闭文件#include<fstream>#include<iostream>usingnamespacestd;voidmain(){inta[10];ofstreamoutfile(“f1.dat”);//定义文件流对象,打开文件″f1.dat″
if(!outfile)
//若打开失败,返回0值{cerr<<″openerror!″<<endl;exit(1);}cout<<″enter10integernumbers:″<<endl;for(inti=0;i<10;i++){cin>>a[i];
outfile<<a[i]<<″″;//向文件″f1.dat″输出数据
}
outfile.close();
//关闭文件″f1.dat″}例13.11有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组送到磁盘文件地f1.dat中存放。文件处理流程定义并打开文件对象打开文件出错处理对文件进行R/W操作关闭文件对象#include<fstream>#include<iostream>voidmain(){inta[10],max,i,order;//定义输入文件流对象,以输入方式打开f1.dat
ifstreaminfile(“f1.dat”);if(!infile){cerr<<“openerror!”<<endl;exit(1);}for(i=0;i<10;i++){infile>>a[i];//从文件读入数据到a数组中cout<<a[i]<<“”;//显示顺序显示10个数}cout<<endl;max=a[0];order=0;例13.12从例13.11建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它的序号。for(i=1;i<10;i++)if(a[i]>max){max=a[i];//存放最大值到max中order=i;//存最大值序号到order中}cout<<″max=″<<max<<endl;cout<<″order=″<<order<<endl;
infile.close();}33658725114488990max=99order=8voidmain(){inta[10];
ifstreaminfile; //定义输入文件类
ofstreamoutfile; //定义输出文件类
infile.open(“file1.txt”); //打开输入文件“file1.txt”
outfile.open(“file2.txt”); //打开输出文件“file2.out”for(inti=0;i<10;i++)
infile>>a[i];//将“file1.txt”中的十个整数输入到a[i]中for(i=0;i<10;i++)
outfile<<a[i]<<‘\t’;//将a[i]中的十个数输出到文件“file2.txt”
outfile<<endl;
infile.close();//关闭输入文件
outfile.close();//关闭输出文件}输入文件“file1.txt”必须存在,且在其中有十个整数将数据从一文件复制到另一文件文件输入输出方式设置值说明:
①每一个打开的文件都有一个文件指针。②可以用“位或”运算符“|”对I/O方式进行组合。ios::in|ios::out
以输入功或输出方式打开文件,文件可R/W如果打开操作失败,open函数的返回值为0(假)如果是用调用构造函数的方式打开文件的,则流对象的值为0。该对象既能定义输入文件对象,又能定义输出文件对象文件流对象.open(文件名,文件打开方式)
用类fstream定义文件对象时的操作用类fstream定义文件对象时的操作fstreampfile1,pfile2;//定义了两个文件类的对象//pfile1联系到“file1.txt”,用于输入pfile1.open(“file1.txt”,ios::in);//pfile2联系到“file2.txt”,用于输出pfile2.open(“file2.txt”,ios::out);charch;pfile1>>ch; //输入pfile2<<ch; //输出pfile1.close();pfile2.close();charch,str[300];ifstreaminfile(“myfile1.txt”);ofstreamoutfile(“myfiel2.txt”);说明:从文件输入一字符或一行字符,当输入至文件尾时,函数返回值为0,可以据此来判断循环结束。涉及到字符串的文件读写语句作用cin.get(ch);从键盘输入一个字符cout.put(ch);向显示器输出一个字符cin.getline(str,300,”\n”);从键盘输入一行字符infile.get(ch);从文件输入一个字符outfile.put(ch);向文件输出一个字符infile.getline(ch,300,”\n”);从文件输入一行字符voidmain(){ charfilename1[256],filename2[256]; cout<<"Inputsourcefilename:";
cin>>filename1;
\\输入文件(源文件)名 cout<<"Inputdestination:"; cin>>filename2;\\输出文件(目的文件)名 ifstreaminfile(filename1);
//用构造函数打开文件 ofstreamoutfile(filename2); charch;
while(infile.get(ch))\\从源文件中读取一个字符,至文件尾停止循环 outfile.put(ch);\\将该字符输出至目的文件 infile.close();\\关闭文件 outfile.close();}实现两个ASCII文件拷贝的程序文件的输入和输出下面程序将data.txt文件中的数据全部读出并累加求和后,结果保存到output.txt文件中.#include<fstream>usingnamespacestd;voidmain(){ifstreamfin(“c:\\data.txt”);
ofstreamfout(“c:\\output.txt”);intt,s=0;while(fin>>t)s+=t;fout<<s<<endl;fin.close();fout.close();}13.4.5对二进制文件的操作若在文件的打开方式中没有特别说明,打开的文件均为ASCII码文件,若要打开二进制文件,则要特别说明并用特定的读写函数。fstreaminfile,outfile;infile.open(“inf1.dat”,ios::in|ios::binary);outfile.open(“outf1.dat”,ios::out|ios::binary);文件名输入方式打开二进制文件文件名输出方式打开二进制文件1.用成员函数来读写二进制文件对二进制文件的读写主要用fstream类的成员函数read和write来实现。这两个成员函数的原型为read(char*buffer,intlen);write(constchar*buffer,intlen);字符指针buffer指向内存中一段存储空间。len是读写的字节数。调用的方式为infile.read(p2,30);outfile.write(p1,50);例13.14将一批数据以二进制形式存放在磁盘文件中。#include<fstream>#include<iostream>usingnamespacestd;structstudent{charname[20];intnum;intage;charsex;};voidmain(){studentstud[3]={“Li”,1001,18,‘f’,“Fun”,1002,19,‘m’,“Wang”,1004,17,‘f’};
ofstreamoutfile(“stud.dat”,ios::out|ios::binary);if(!outfile){cerr<<″openerror!″<<endl;abort();//退出程序}for(inti=0;i<3;i++)outfile.write((char*)&stud[i],sizeof(stud[i]));outfile.close();}可以一次输出整个数组到磁盘文件:outfile.write((char*)&stud[0],sizeof(stud));用此方法一次可以输出一批数据,效率较高。在输出的数据之间不必加入空格,在一次输出之后也不必加回车换行符。在以后从该文件读入数据时不是靠空格作为数据的间隔,而是用字节数来控制。例13.14将一批数据以二进制形式存放在磁盘文件中例13.15将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。#include<fstream>#include<iostream>usingnamespacestd;structstudent{stringname;//最好改为charname[20];intnum;intage;charsex;};voidmain(){studentstud[3];inti;
ifstreaminfile(″stud.dat″,ios::in|ios::binary);if(!infile){cerr<<″openerror!″<<endl;abort();}for(i=0;i<3;i++)
infile.read((char*)&stud[i],sizeof(stud[i]));
infile.close();for(i=0;i<3;i++){cout<<″NO.″<<i+1<<endl;cout<<″name:″<<stud[i].name<<endl;cout<<″num:″<<stud[i].num<<endl;;cout<<″age:″<<stud[i].age<<endl;cout<<″sex:″<<stud[i].sex<<endl<<endl;}}问题:能否一次读入文件中的全部数据,如infile.read((char*)&stud[0],sizeof(stud));
运行时显示器上显示NO.1name:Linum:1001age:18sex:fNO.2name:Funnum:1001age:19sex:mNO.3name:Wangnum:1004age:17sex:f可以!infile.eof()
当到达文件结束位置时,该函数返回一个非零值;否则返回零。fstreaminfile;infile.open(“data1.dat”,ios::in|ios::binary);if(!infile){cerr<<“OpenError!\n”;exit(1);}charstr[300];while(!infile.eof())infile.read(str,300);判断打开是否出错判断是否读到文件尾判断二进制文件是否读到文件尾?voidmain(){charfilename1[256],filename2[256];charbuff[4096];//设置输入缓冲区cout<<”输入源文件名:”;cin>>filename1;cout<<”输入目的文件名:”;cin>>filename2;fstreaminfile,outfile;infile.open(filename1,ios::in|ios::binary);outfile.open(filename2,ios::out|ios::binary);intn;while(!infile.eof()){ //文件不结束,继续循环
infile.read(buff,4096); //一次读4096个字节 n=infile.gcount(); //取实际读的字节数 outfile.write(buff,n); //按实际读的字节数写入文件 }infile.close();outfile.close();}
实现两个二进制文件拷贝的程序2.与文件指针有关的流成员函数当一打开文件,文件指针位于文件头,并随着读写字节数的多少顺序移动。
文件内容文件指针对于二进制文件(或文本文件)允许对指针进行控制,使它按用户的意图移动到所需的位置,以便在该位置上进行读写。2.与文件指针有关的流成员函数文件流提供一些有关文件指针的成员函数:infile.gcount()
//返回最新一次输入的字节数structstudent{charname[20];intnum;intage;charsex;}stud;如:ifstreaminfile(“c:\\data.txt”);infile.read(&stud,sizeof(stud));if(infile.gcount()<sizeof(stud))
{
cout<<“读入数据有误!”;}文件内容文件指针
infile.tellg()——返回输入文件指针的当前位置(long型整数,以字节为单位,从0算起)
infile.seekg(文件中的位置);
//将输入文件的指针移到指定的位置
infile.seekg(位移量,参照位置);//将输入文件指针移到从参照位置为基础移动若干字节位置
Outfile.tellp()——
返回输出文件指针的当前位置
Outfile.seekp(位移量,参照位置
);//将输出文件指针移到从参照位置为基础移动若干字节位置与文件指针有关的流成员函数参照位置
ios::beg
文件开头begin(默认值)
ios::cur
指针当前位置current
ios::end
文件末尾(已超出文件尾)如:infile.seekg(100);输入文件指针移到文件第101字节处(第1个字符的位置是0)
infile.seekg(-50,ios::cur
);当前位置回移50个字节与文件指针有关的流成员函数文件内容文件开头文件当前位置文件末尾说明
异常——指针已在文件尾,还要读数据,则eof()=1;打开文件失败;其之后的相关操作都会失效。
fin.seekg(0,ios::beg);//将文件指针移到文件头cout<<“begin=”<<fin.tellg()<<endl;//显示文件指针当前位置0fin.seekg(0,ios::end);//将文件指针移到文件尾fin.get();//到文件尾还要读数据,eof出现。fin状态异常cout<<"end="<<fin.tellg()<<"eof()="<<fin.eof()<<endl;//显示:end=-1eof()=1fin.seekg(0,ios::beg);//由于fin状态异常,seekg不起作用cout<<“begin=”<<fin.tellg()<<endl;//显示:begin=-1当文件对象发生操作异常时注意
异常——指针已在文件尾,还要读数据,则eof发生;要使其后操作有效,要用clear()清除之前的错误状态
fin.seekg(0,ios::beg);//将文件指针移到文件头cout<<“begin=”<<fin.tellg()<<endl;//显示文件指针当前位置0fin.seekg(0,ios::end);//将文件指针移到文件尾fin.get();//到文件尾还要读数据,eof出现。fin状态异常cout<<"end="<<fin.tellg()<<"eof()="<<fin.eof()<<endl;//显示:end=-1eof()=1fin.clear();
//将fin的异常状态清除fin.seekg(0,ios::beg);//由于fin状态异常,seekg不起作用cout<<“begin=”<<fin.tellg()<<endl;//显示:begin=0当文件对象发生操作异常时3.随机访问二进制数据文件例13.16有5个学生的数据,要求:
(1)把它们存到磁盘文件中;(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;(3)将第3个学生的数据修改后存回磁盘文件中的原有位置。(4)从磁盘文件读入修改后的5个学生的数据并显示出来。一般情况下读写是顺序进行的,即逐个字节进行读写。但是对于二进制数据文件来说,可用前面的成员函数移动指针,随机地访问文件中任一位置上的数据,还可以修改文件中的内容。例13.16程序完成任务流程内存5个学生的数据stud[5]磁盘文件stud.dat(1)把它们存到磁盘文件中3个学生数据stud1[3](2.1)将磁盘文件中的第1,3,5个学生数据读入内存显示第1,3,5学生数据(2.2)3.1修改第3个学生的数据
(3.2)把修改后的数据存到文件原有位置5个学生的数据stud[5]显修改后5个学生数据(4.2)(4.1)将磁盘文件中的5个学生数据读入内存要实现以上要求,需要解决3个问题:由于同一磁盘文件在程序中需要频繁地进行输入和输出,因此可将文件的工作方式指定为输入输出文件,即ios::in|ios::out|ios::binary正确计算好每次访问时指针的定位,即正确使用seekg或seekp函数。infile.seekg(位移量,参照位置);//将输入文件指针移到从参照位置为基础移动若干字节位置Outfile.seekp(位移量,参照位置);//将输出文件指针移到从参照位置为基础移动若干字节位置(3)正确进行文件中数据的重写(更新)。3.随机访问二进制数据文件#include<fstream>#include<iostream>usingnamespacestd;structstudent{intnum;charname[20];floatscore;};voidmain(){studentstud[5]={1001,″Li″,85,1002,″Fun″,97.5,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微生态制剂在水产养殖中的应用现状及发展前景
- 新能源电动摩托车项目计划书
- 浅谈工资薪酬在人力资源管理中的激励作用
- 零食电商商业计划书
- 销售部kpi绩效考核方案
- 2025年中国外墙外保温材料行业市场规模及投资前景预测分析报告
- 2025年中国婴儿学步手推车行业市场前景预测及投资价值评估分析报告
- 2025年中国家用空气净化器市场研究及发展趋势预测
- 2025年中国尼龙管材市场动态监测及竞争战略研究报告
- 2025年中国干冰清洁系统行业市场前景预测及投资价值评估分析报告
- 2025年中级列车长技能鉴定考试题库
- 2025年禁毒社工考试试题及答案
- 2025年江苏南京市鼓楼区区属国企集团招聘笔试参考题库含答案解析
- 华北理工口腔解剖生理学教案
- 2025年纵剪分条机组项目可行性研究报告
- 第一次工业革命说课稿课件
- 应急救援指挥部的组成、职责和分工模版(3篇)
- 江苏省高等学校学生思想政治教育教师专业技术资格条件
- 中弘室外机网关使用手册(V1.4版本)20181107
- 水域救援设备配置与使用方案
- 大学生职业规划大赛成长赛道
评论
0/150
提交评论