版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计实习输入输出流和文件操作1.程序设计实习1.输入输出流流的概念模型C++中与流操作相关的类及其继承关系输入输出流对象:cin,cout,cerr,clog输出流输入流无格式输入输出流操纵算子流格式状态2.输入输出流流的概念模型2.流的概念模型流-可以看作一个无限长的二进制数字序列通过读写指针进行流的读和写(以字节为单位)
~10101110~~10101110~将流上的数据读进变量x1010111011100010将y的值写入流yx3.流的概念模型流-可以看作一个无限长的二进制数字序列~流的概念模型输出流可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,1100011010~写指针4.流的概念模型输出流1100011010~写指针4.流的概念模型输入流可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。1100011010~读指针5.流的概念模型输入流1100011010~读指针5.有格式读写和无格式读写
字符方式/二进制方式读写有格式读写,以某种数据类型为单位读写例如:读一个整数,写一个浮点数等;无格式读写,以字节为单位读写,不区分其中的内容例如:读20个字节,写50个字节等;6.有格式读写和无格式读写
字符方式/二进制方式读写有格式读写,缓冲区刷新向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写;也可以通过函数在程序中主动将缓冲区内容写入输出流。7.缓冲区刷新向输出流中写数据时,通常是先向缓冲区中写,当缓冲区C++中与流操作相关的类
及其继承关系iosistreamostreamifstreamiostreamofstreamfstream8.C++中与流操作相关的类
及其继承关系iosistreamo标准流对象输入流对象:cin与标准输入设备相连输出流对象:cout与标准输出设备相连
cerr与标准错误输出设备相连非缓冲输出
clog与标准错误输出设备相连缓冲输出9.标准流对象输入流对象:cin与标准输入设备相连9.输出流流插入运算符<<cout<<“Goodmorning!\n”;不刷新缓冲区
cout<<“Good”;不刷新缓冲区
cout<<“morning!”;不刷新缓冲区
cout<<endl;刷新缓冲区
cout<<flush;刷新缓冲区10.输出流流插入运算符<<10.输出流用成员函数put输出字符
cout.put(‘A’);put的连续使用
cout.put(‘A’).put(‘a’);
11.输出流用成员函数put输出字符11.输入流读取运算的返回值重载>>运算符的定义:istream&operator>>(istream&input,A&a){…….returninput;}
返回的是输入流的引用(引用本身是地址),在读取不成功时,该地址被置成0.所以可以用如下方法判输入结束:intx;
while(cin>>x){…}12.输入流读取运算的返回值12.输入流成员函数cin.get()读入一个字符(包括空白字符),返回该字符;cin.get(char*buffer,intsize,chardelim=‘\n’)
或者读size–1个字符入buffer,或者遇到‘\n’;
在buffer最后加‘\0’,分隔符留在输入流.cin.getline(char*buffer,intsize,chardelim=‘\n’)
或者读size–1个字符入buffer,或者遇到‘\n’;
在buffer最后加‘\0’,分隔符从流去掉.cin.eof()返回输入是否结束标志.13.输入流成员函数13.输入流其它函数cin.peek();返回下一个字符,但不从流中去掉.putback(charch);将字符ch放回输入流ignore(intnCount=1,intdelim=EOF);
从流中删掉最多nCount个字符,遇到EOF时结束。14.输入流其它函数14.无格式输入输出用read,write进行指定字节数的输入输出constintSIZE=80;charbuffer[SIZE];cin.read(buffer,20);cout.write(buffer,cin.gcount());//gcount返回上次读入的字节数cout<<endl;输入:Usingtheread,writeandgcountmemberfunctions
输出:Usingtheread,write15.无格式输入输出用read,write进行指定字节数的输流操纵算子整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子使用流操纵算子需要#include<iomanip>16.流操纵算子整数流的基数:流操纵算子dec,oct,hex,s流操纵算子整数流的基数:流操纵算子dec,oct,hexintn=10;cout<<n<<endl;cout<<hex<<n<<“\n”<<dec<<n<<“\n”<<oct<<n<<endl;输出结果:
10a101217.流操纵算子整数流的基数:流操纵算子dec,oct,hex17控制浮点数精度的流操纵算子precision,setprecisionprecision是成员函数,其调用方式为:
cout.precision(5);setprecision是流操作算子,其调用方式为:
cout>>setprecision(5);//可以连续输出它们的功能相同。指定输出浮点数的有效位数18.控制浮点数精度的流操纵算子precision,setpre
浮点数输出最多6位有效数字#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89,y=12.34567; intn=1234567; intm=12; cout<<setprecision(6)<<x<<endl <<y<<endl<<n<<endl<<m;}控制浮点数精度的流操纵算子输出:1.23457e+00612.345712345671219.浮点数输出最多6位有效数字#include<iostre
以小数点位置固定的方式输出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89,y=12.34567; intn=1234567; intm=12; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl <<y<<endl<<n<<endl<<m;}控制浮点数精度的流操纵算子输出:1234567.89000012.34567012345671220.以小数点位置固定的方式输出#include<iostre
取消以小数点位置固定的方式输出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl<<
resetiosflags(ios::fixed)<<x;}控制浮点数精度的流操纵算子输出:1234567.8900001.23457e+00621.取消以小数点位置固定的方式输出#include<iost设置域宽的流操纵算子
设置域宽(setw,width)两者功能相同,一个是成员函数,另一个是流操作算子,调用方式不同:cin>>setw(5);或者cin.width(5);cout<<setw(5);或者cout.width(5);
22.设置域宽的流操纵算子设置域宽(setw,width)22.设置域宽的流操纵算子
设置域宽(setw,width)例:intw=4;输入:1234567890charstring[10];输出:1234 cin.width(5);5678 while(cin>>string){90 cout.width(w++); cout<<string<<endl; cin.width(5); }23.设置域宽的流操纵算子设置域宽(setw,width)23.设置域宽的流操纵算子
设置域宽(setw,width)需要注意的是在每次读入和输出之前都要设置宽度。例如:
charstr[10];输入:1234567890cin.width(5);输出:1234cin>>string;567890cout<<string<<endl;cin>>string;cout<<string<<endl;24.设置域宽的流操纵算子设置域宽(setw,width)24.设置域宽的流操纵算子
设置域宽(setw,width)需要注意的是在每次读入和输出之前都要设置宽度。例如:
charstr[10];输入:1234567890cin.width(5);输出:1234cin>>string;5678cout<<string<<endl;
cin.width(5);cin>>string;cout<<string<<endl;25.设置域宽的流操纵算子设置域宽(setw,width)25.用户自定义流操纵算子ostream&tab(ostream&output){returnoutput<<'\t';}cout<<“aa”<<tab<<“bb”<<endl;输出:aa bb为什么可以?26.用户自定义流操纵算子ostream&tab(ostream用户自定义流操纵算子因为iostream里对<<进行了重载(成员函数)ostream&operator<<(ostream&(*p)(ostream&));27.用户自定义流操纵算子因为iostream里对<<进行文件操作数据的层次文件和流建立顺序文件文件的读写指针有格式读写无格式读写28.文件操作数据的层次28.数据的层次位bit字节byte域/记录 例如:学生记录
intID;charname[10];intage;intrank[10];我们将所有记录顺序地写入一个文件,称为顺序文件。29.数据的层次位bit29.文件和流可以将顺序文件看作一个有限字符构成的顺序字符流,然后象对cin,cout一样的读写。回顾一下输入输出流类的结构层次:iosistreamostreamifstreamiostreamofstreamfstream30.文件和流可以将顺序文件看作一个有限字符构成的顺序字符流,然后建立顺序文件#include<fstream.h>//包含头文件ofstreamoutFile(“clients.dat”,ios::out|ios::binary);//打开文件ofstream是fstream中定义的类outFile是我们定义的ofstream类的对象“clients.dat”是将要建立的文件的文件名ios::out是打开并建立文件的选项ios:out输出到文件,删除原有内容ios::app输出到文件,保留原有内容,总是在尾部添加ios::ate输出到文件,保留原有内容,可以在文件任意位置添加ios::binary以二进制文件格式打开文件31.建立顺序文件#include<fstream.h>/建立顺序文件也可以先创建ofstream对象,再用open函数打开
ofstreamfout; fout.open("test.out",ios::out|ios::binary);判断打开是否成功:
if(!fout){cerr<<“Fileopenerror!”<<endl;}32.建立顺序文件也可以先创建ofstream对象,再用open文件的读写指针对于输入文件,有一个读指针;对于输出文件,有一个写指针;对于输入输出文件,有一个读写指针;标识文件操作的当前位置,该指针在哪里,读写操作就在哪里进行。33.文件的读写指针对于输入文件,有一个读指针;33.文件的读写指针ofstreamfout(“a1.out”,ios::ate);longlocation=fout.tellp();//取得写指针的位置location=10L;fout.seekp(location);//将写指针移动到第10个字节处fout.seekp(location,ios::beg);//从头数locationfout.seekp(location,ios::cur);//从当前位置数locationfout.seekp(location,ios::end);//从尾部数locationlocation可以为负值34.文件的读写指针ofstreamfout(“a1.out”文件的读写指针ifstreamfin(“a1.in”,ios::ate);longlocation=fin.tellg();//取得读指针的位置location=10L;fin.seekg(location);//将读指针移动到第10个字节处fin.seekg(location,ios::beg);//从头数locationfin.seekg(location,ios::cur);//从当前位置数locationfin.seekg(location,ios::end);//从尾部数locationlocation可以为负值35.文件的读写指针ifstreamfin(“a1.in”,i字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流操作算子也同样适用于文件流。写一个程序,将文件in.txt里面的整数排序后,输出到out.txt例如,若in.txt的内容为:12349456879则执行本程序后,生成的out.txt的内容为:1694523487936.字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流#include<iostream>#include<fstream>#include<stdlib.h>usingnamespacestd;intcmp(constvoid*x1,constvoid*x2){return*((int*)x1)-*((int*)x2);}intmain(){ intv[100],inti=0,x; ifstreamsrcFile("in.txt",ios::in); ofstreamdestFile("out.txt",ios::out); while(srcFile>>x){v[i]=x;i++;} qsort(v,i,sizeof(int),cmp); for(intj=0;j<i;j++) destFile<<v[j]<<""; destFile.close(); srcFile.close();}参考程序37.#include<iostream>参考程序37.二进制文件读写intx=10;fout.seekp(20,ios::beg);fout.write(constchar*)(&x),sizeof(int));fin.seekg(0,ios::beg);fin.read((char*)(&x),sizeof(int));二进制文件读写,直接写二进制数据,记事本看未必正确。38.二进制文件读写intx=10;38.二进制文件读写//下面的程序从键盘输入几个学生的姓名的成绩,并以二进制//文件形式存起来#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};39.二进制文件读写//下面的程序从键盘输入几个学生的姓名的成绩,intmain(){ CStudents; ofstreamOutFile("c:\\tmp\\students.dat", ios::out||ios::binary); while(cin>>s.szName>>s.nScore){ if(stricmp(s.szName,“exit”)==0)//名字为exit则结束 break; OutFile.write((char*)&s,sizeof(s)); } OutFile.close(); return0;}40.intmain()40.输入:
Tom60Jack80Jane40exit0则形成的students.dat为72字节,用记事本打开,呈现:Tom烫烫烫烫烫烫烫烫<Jack烫烫烫烫烫烫烫蘌Jane烫烫烫烫烫烫烫?41.输入:41.二进制文件读写//下面的程序将students.dat文件的内容读出并显示#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};42.二进制文件读写//下面的程序将students.dat文intmain(){ CStudents; ifstreamInFile(“c:\\tmp\\students.dat”,ios::in|ios::binary);
if(!InFile){ cout<<"error"<<endl; return0; } while(InFile.read((char*)&s,sizeof(s))){ intnReadedBytes=InFile.gcount();//看刚才读了多少字节 cout<<s.szName<<""<<s.nScore<<endl; } InFile.close(); return0;}输出:Tom60Jack80Jmain()43.二进制文件读写//下面的程序将students.dat文件的Jane的名字改成Mike#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};44.二进制文件读写//下面的程序将students.dat文输出:Tom60Jack80Mike40intmain(){ CStudents; fstreamiofile("c:\\tmp\\students.dat",ios::in|ios::out|ios::binary); if(!iofile){ cout<<"error"; return0; } iofile.seekg(2*sizeof(s),ios::beg);//定位写指针到第三个记录 iofile.write("Mike",strlen("Mike")); iofile.seekp(0,ios::beg);//定位读指针到开头 while(iofile.read((char*)&s,sizeof(s))) cout<<s.szName<<""<<s.nScore<<endl; iofile.close(); return0;}45.输出:intmain()45.显式关闭文件ifstreamfin(“test.dat”,ios::in);fin.close();ofstreamfout(“test.dat”,ios::out);fout.close();46.显式关闭文件ifstreamfin(“test.dat”,命令行参数启动程序运行时可以指定命令行参数方式一开始-〉运行-〉输入cmd,按确定-〉dos窗口可以用cd切换当前目录:...cd子目录等等来到程序所在目录,启动程序:myprogramarg1arg2或者在任意目录下,启动程序:e://me//aaarg1arg2绝对路径和相对路经的概念方式二在vc编程环境中:project->settings->debug->programarguments47.命令行参数启动程序运行时可以指定命令行参数47.命令行参数intmain(intargc,char*argv[]){cout<<argc<<endl;for(inti=0;i<argc;i++)cout<<argv[i]<<endl;return0;}第一个参数为命令本身,第二个以后为参数48.命令行参数intmain(intargc,char*命令行参数若上面程序可执行文件名为sampl.exe,则在命令行输入:smaplefile1a.txts输出结果为4tmp.exe-vtest.txt249.命令行参数若上面程序可执行文件名为sampl.exe,49例子:mycopy程序,文件拷贝/*用法示例:
mycopysrc.datdest.dat
即将src.dat拷贝到dest.dat
如果dest.dat原来就有,则原来的文件会被覆盖*/#include<iostream>#include<fstream>usingnamespacestd;intmain(intargc,char*argv[]){ if(argc!=3){ cout<<"Filenamemissing!"<<endl; return0; }
ifstreaminFile(argv[1],ios::binary|ios::in);//打开文件用于读
if(!inFile){ cout<<"Sourcefileopenerror."<<endl; return0; } ofstreamoutFile(argv[2],ios::binary|ios::out);//打开文件用于写
if(!outFile){ cout<<"Newfileopenerror."<<endl; inFile.close();//打开的文件一定要关闭
return0; } charc; while(inFile.get(c))//每次读取一个字符
outFile.put(c); //每次写入一个字符
outFile.close(); inFile.close(); return0;}50.例子:mycopy程序,文件拷贝/*50. ifstreaminFile(argv[1],ios::binary|ios::in);//打开文件用于读
if(!inFile){ cout<<"Sourcefileopenerror."<<endl; return0; } ofstreamoutFile(argv[2],ios::binary|ios::out);//打开文件用于写
if(!outFile){ cout<<"Newfileopenerror."<<endl; inFile.close();//打开的文件一定要关闭
return0; } charc; while(inFile.get(c))//每次读取一个字符
outFile.put(c); //每次写入一个字符
outFile.close(); inFile.close(); return0;}51. ifstreaminFile(argv[1],ios::程序设计实习输入输出流和文件操作52.程序设计实习1.输入输出流流的概念模型C++中与流操作相关的类及其继承关系输入输出流对象:cin,cout,cerr,clog输出流输入流无格式输入输出流操纵算子流格式状态53.输入输出流流的概念模型2.流的概念模型流-可以看作一个无限长的二进制数字序列通过读写指针进行流的读和写(以字节为单位)
~10101110~~10101110~将流上的数据读进变量x1010111011100010将y的值写入流yx54.流的概念模型流-可以看作一个无限长的二进制数字序列~流的概念模型输出流可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,1100011010~写指针55.流的概念模型输出流1100011010~写指针4.流的概念模型输入流可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。1100011010~读指针56.流的概念模型输入流1100011010~读指针5.有格式读写和无格式读写
字符方式/二进制方式读写有格式读写,以某种数据类型为单位读写例如:读一个整数,写一个浮点数等;无格式读写,以字节为单位读写,不区分其中的内容例如:读20个字节,写50个字节等;57.有格式读写和无格式读写
字符方式/二进制方式读写有格式读写,缓冲区刷新向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写;也可以通过函数在程序中主动将缓冲区内容写入输出流。58.缓冲区刷新向输出流中写数据时,通常是先向缓冲区中写,当缓冲区C++中与流操作相关的类
及其继承关系iosistreamostreamifstreamiostreamofstreamfstream59.C++中与流操作相关的类
及其继承关系iosistreamo标准流对象输入流对象:cin与标准输入设备相连输出流对象:cout与标准输出设备相连
cerr与标准错误输出设备相连非缓冲输出
clog与标准错误输出设备相连缓冲输出60.标准流对象输入流对象:cin与标准输入设备相连9.输出流流插入运算符<<cout<<“Goodmorning!\n”;不刷新缓冲区
cout<<“Good”;不刷新缓冲区
cout<<“morning!”;不刷新缓冲区
cout<<endl;刷新缓冲区
cout<<flush;刷新缓冲区61.输出流流插入运算符<<10.输出流用成员函数put输出字符
cout.put(‘A’);put的连续使用
cout.put(‘A’).put(‘a’);
62.输出流用成员函数put输出字符11.输入流读取运算的返回值重载>>运算符的定义:istream&operator>>(istream&input,A&a){…….returninput;}
返回的是输入流的引用(引用本身是地址),在读取不成功时,该地址被置成0.所以可以用如下方法判输入结束:intx;
while(cin>>x){…}63.输入流读取运算的返回值12.输入流成员函数cin.get()读入一个字符(包括空白字符),返回该字符;cin.get(char*buffer,intsize,chardelim=‘\n’)
或者读size–1个字符入buffer,或者遇到‘\n’;
在buffer最后加‘\0’,分隔符留在输入流.cin.getline(char*buffer,intsize,chardelim=‘\n’)
或者读size–1个字符入buffer,或者遇到‘\n’;
在buffer最后加‘\0’,分隔符从流去掉.cin.eof()返回输入是否结束标志.64.输入流成员函数13.输入流其它函数cin.peek();返回下一个字符,但不从流中去掉.putback(charch);将字符ch放回输入流ignore(intnCount=1,intdelim=EOF);
从流中删掉最多nCount个字符,遇到EOF时结束。65.输入流其它函数14.无格式输入输出用read,write进行指定字节数的输入输出constintSIZE=80;charbuffer[SIZE];cin.read(buffer,20);cout.write(buffer,cin.gcount());//gcount返回上次读入的字节数cout<<endl;输入:Usingtheread,writeandgcountmemberfunctions
输出:Usingtheread,write66.无格式输入输出用read,write进行指定字节数的输流操纵算子整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子使用流操纵算子需要#include<iomanip>67.流操纵算子整数流的基数:流操纵算子dec,oct,hex,s流操纵算子整数流的基数:流操纵算子dec,oct,hexintn=10;cout<<n<<endl;cout<<hex<<n<<“\n”<<dec<<n<<“\n”<<oct<<n<<endl;输出结果:
10a101268.流操纵算子整数流的基数:流操纵算子dec,oct,hex17控制浮点数精度的流操纵算子precision,setprecisionprecision是成员函数,其调用方式为:
cout.precision(5);setprecision是流操作算子,其调用方式为:
cout>>setprecision(5);//可以连续输出它们的功能相同。指定输出浮点数的有效位数69.控制浮点数精度的流操纵算子precision,setpre
浮点数输出最多6位有效数字#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89,y=12.34567; intn=1234567; intm=12; cout<<setprecision(6)<<x<<endl <<y<<endl<<n<<endl<<m;}控制浮点数精度的流操纵算子输出:1.23457e+00612.345712345671270.浮点数输出最多6位有效数字#include<iostre
以小数点位置固定的方式输出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89,y=12.34567; intn=1234567; intm=12; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl <<y<<endl<<n<<endl<<m;}控制浮点数精度的流操纵算子输出:1234567.89000012.34567012345671271.以小数点位置固定的方式输出#include<iostre
取消以小数点位置固定的方式输出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl<<
resetiosflags(ios::fixed)<<x;}控制浮点数精度的流操纵算子输出:1234567.8900001.23457e+00672.取消以小数点位置固定的方式输出#include<iost设置域宽的流操纵算子
设置域宽(setw,width)两者功能相同,一个是成员函数,另一个是流操作算子,调用方式不同:cin>>setw(5);或者cin.width(5);cout<<setw(5);或者cout.width(5);
73.设置域宽的流操纵算子设置域宽(setw,width)22.设置域宽的流操纵算子
设置域宽(setw,width)例:intw=4;输入:1234567890charstring[10];输出:1234 cin.width(5);5678 while(cin>>string){90 cout.width(w++); cout<<string<<endl; cin.width(5); }74.设置域宽的流操纵算子设置域宽(setw,width)23.设置域宽的流操纵算子
设置域宽(setw,width)需要注意的是在每次读入和输出之前都要设置宽度。例如:
charstr[10];输入:1234567890cin.width(5);输出:1234cin>>string;567890cout<<string<<endl;cin>>string;cout<<string<<endl;75.设置域宽的流操纵算子设置域宽(setw,width)24.设置域宽的流操纵算子
设置域宽(setw,width)需要注意的是在每次读入和输出之前都要设置宽度。例如:
charstr[10];输入:1234567890cin.width(5);输出:1234cin>>string;5678cout<<string<<endl;
cin.width(5);cin>>string;cout<<string<<endl;76.设置域宽的流操纵算子设置域宽(setw,width)25.用户自定义流操纵算子ostream&tab(ostream&output){returnoutput<<'\t';}cout<<“aa”<<tab<<“bb”<<endl;输出:aa bb为什么可以?77.用户自定义流操纵算子ostream&tab(ostream用户自定义流操纵算子因为iostream里对<<进行了重载(成员函数)ostream&operator<<(ostream&(*p)(ostream&));78.用户自定义流操纵算子因为iostream里对<<进行文件操作数据的层次文件和流建立顺序文件文件的读写指针有格式读写无格式读写79.文件操作数据的层次28.数据的层次位bit字节byte域/记录 例如:学生记录
intID;charname[10];intage;intrank[10];我们将所有记录顺序地写入一个文件,称为顺序文件。80.数据的层次位bit29.文件和流可以将顺序文件看作一个有限字符构成的顺序字符流,然后象对cin,cout一样的读写。回顾一下输入输出流类的结构层次:iosistreamostreamifstreamiostreamofstreamfstream81.文件和流可以将顺序文件看作一个有限字符构成的顺序字符流,然后建立顺序文件#include<fstream.h>//包含头文件ofstreamoutFile(“clients.dat”,ios::out|ios::binary);//打开文件ofstream是fstream中定义的类outFile是我们定义的ofstream类的对象“clients.dat”是将要建立的文件的文件名ios::out是打开并建立文件的选项ios:out输出到文件,删除原有内容ios::app输出到文件,保留原有内容,总是在尾部添加ios::ate输出到文件,保留原有内容,可以在文件任意位置添加ios::binary以二进制文件格式打开文件82.建立顺序文件#include<fstream.h>/建立顺序文件也可以先创建ofstream对象,再用open函数打开
ofstreamfout; fout.open("test.out",ios::out|ios::binary);判断打开是否成功:
if(!fout){cerr<<“Fileopenerror!”<<endl;}83.建立顺序文件也可以先创建ofstream对象,再用open文件的读写指针对于输入文件,有一个读指针;对于输出文件,有一个写指针;对于输入输出文件,有一个读写指针;标识文件操作的当前位置,该指针在哪里,读写操作就在哪里进行。84.文件的读写指针对于输入文件,有一个读指针;33.文件的读写指针ofstreamfout(“a1.out”,ios::ate);longlocation=fout.tellp();//取得写指针的位置location=10L;fout.seekp(location);//将写指针移动到第10个字节处fout.seekp(location,ios::beg);//从头数locationfout.seekp(location,ios::cur);//从当前位置数locationfout.seekp(location,ios::end);//从尾部数locationlocation可以为负值85.文件的读写指针ofstreamfout(“a1.out”文件的读写指针ifstreamfin(“a1.in”,ios::ate);longlocation=fin.tellg();//取得读指针的位置location=10L;fin.seekg(location);//将读指针移动到第10个字节处fin.seekg(location,ios::beg);//从头数locationfin.seekg(location,ios::cur);//从当前位置数locationfin.seekg(location,ios::end);//从尾部数locationlocation可以为负值86.文件的读写指针ifstreamfin(“a1.in”,i字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流操作算子也同样适用于文件流。写一个程序,将文件in.txt里面的整数排序后,输出到out.txt例如,若in.txt的内容为:12349456879则执行本程序后,生成的out.txt的内容为:1694523487987.字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流#include<iostream>#include<fstream>#include<stdlib.h>usingnamespacestd;intcmp(constvoid*x1,constvoid*x2){return*((int*)x1)-*((int*)x2);}intmain(){ intv[100],inti=0,x; ifstreamsrcFile("in.txt",ios::in); ofstreamdestFile("out.txt",ios::out); while(srcFile>>x){v[i]=x;i++;} qsort(v,i,sizeof(int),cmp); for(intj=0;j<i;j++) destFile<<v[j]<<""; destFile.close(); srcFile.close();}参考程序88.#include<iostream>参考程序37.二进制文件读写intx=10;fout.seekp(20,ios::beg);fout.write(constchar*)(&x),sizeof(int));fin.seekg(0,ios::beg);fin.read((char*)(&x),sizeof(int));二进制文件读写,直接写二进制数据,记事本看未必正确。89.二进制文件读写intx=10;38.二进制文件读写//下面的程序从键盘输入几个学生的姓名的成绩,并以二进制//文件形式存起来#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};90.二进制文件读写//下面的程序从键盘输入几个学生的姓名的成绩,intmain(){ CStudents; ofstreamOutFile("c:\\tmp\\students.dat", ios::out||ios::binary); while(cin>>s.szName>>s.nScore){ if(stricmp(s.szName,“exit”)==0)//名字为exit则结束 break; OutFile.write((char*)&s,sizeof(s)); } OutFile.close(); return0;}91.intmain()40.输入:
Tom60Jack80Jane40exit0则形成的students.dat为72字节,用记事本打开,呈现:Tom烫烫烫烫烫烫烫烫<Jack烫烫烫烫烫烫烫蘌Jane烫烫烫烫烫烫烫?92.输入:41.二进制文件读写//下面的程序将students.dat文件的内容读出并显示#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};93.二进制文件读写//下面的程序将students.dat文intmain(){ CStudents; ifstreamInFile(“c:\\tmp\\students.dat”,ios::in|ios::binary);
if(!InFile){ cout<<"error"<<endl; return0; } while(InFile.read((char*)&s,sizeof(s))){ intnReadedBytes=InFile.gcount();//看刚才读了多少字节 cout<<s.szName<<""<<s.nScore<<endl; } InFile.close(); return0;}输出:Tom60Jack80Jmain()43.二进制文件读写//下面的程序将students.dat文件的Jane的名字改成Mike#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};95.二进制文件读写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年民政局婚姻解除协议规范格式
- 2024年家居装修中介服务协议
- 2024专业外包工作人员劳动协议
- 2024年纺织用纱线采购协议
- 2024专业化成品油交易协议典范
- 2024个人贷款反担保协议典范
- 2024年度房产销售专属代理协议
- 文书模板-《产业园咨询服务合同》
- 定制化技术服务方案协议2024
- 2024年杭州劳务派遣服务协议样本
- 操作系统课件(6.1 云计算技术)
- 食管癌手术配合
- Brother-TC-S2A机器操作资料课件
- 错纳矿区Ⅰ号矿体铅锌矿800~1100td的露天开采最终开采境界设计说明
- 18慢性肾功能不全临床路径
- 断水层施工方案
- “7_16”大连保税区油库特大爆炸事故原因调查
- 硕士研究生入学登记表
- PCBA常见的一般性不良现象
- 董公选择日要览[整理版]
- 师德的五项修炼(修心、修口、修眼、修耳、修身)
评论
0/150
提交评论