版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計實(shí)習(xí)輸入輸出流和文件操作1.程序設(shè)計實(shí)習(xí)1.輸入輸出流流的概念模型C++中與流操作相關(guān)的類及其繼承關(guān)系輸入輸出流對象:cin,cout,cerr,clog輸出流輸入流無格式輸入輸出流操縱算子流格式狀態(tài)2.輸入輸出流流的概念模型2.流的概念模型流-可以看作一個無限長的二進(jìn)制數(shù)字序列通過讀寫指針進(jìn)行流的讀和寫(以字節(jié)為單位)
~10101110~~10101110~將流上的數(shù)據(jù)讀進(jìn)變量x1010111011100010將y的值寫入流yx3.流的概念模型流-可以看作一個無限長的二進(jìn)制數(shù)字序列~流的概念模型輸出流可以看作一端無限,另一端通過寫指針不停地向后寫入新內(nèi)容的單向流,1100011010~寫指針4.流的概念模型輸出流1100011010~寫指針4.流的概念模型輸入流可以看作一端無限,另一端通過讀指針不停地從流中讀取新內(nèi)容的單向流,讀出的內(nèi)容從流中刪去。1100011010~讀指針5.流的概念模型輸入流1100011010~讀指針5.有格式讀寫和無格式讀寫
字符方式/二進(jìn)制方式讀寫有格式讀寫,以某種數(shù)據(jù)類型為單位讀寫例如:讀一個整數(shù),寫一個浮點(diǎn)數(shù)等;無格式讀寫,以字節(jié)為單位讀寫,不區(qū)分其中的內(nèi)容例如:讀20個字節(jié),寫50個字節(jié)等;6.有格式讀寫和無格式讀寫
字符方式/二進(jìn)制方式讀寫有格式讀寫,緩沖區(qū)刷新向輸出流中寫數(shù)據(jù)時,通常是先向緩沖區(qū)中寫,當(dāng)緩沖區(qū)寫滿時,才真正向輸出流寫;也可以通過函數(shù)在程序中主動將緩沖區(qū)內(nèi)容寫入輸出流。7.緩沖區(qū)刷新向輸出流中寫數(shù)據(jù)時,通常是先向緩沖區(qū)中寫,當(dāng)緩沖區(qū)C++中與流操作相關(guān)的類
及其繼承關(guān)系iosistreamostreamifstreamiostreamofstreamfstream8.C++中與流操作相關(guān)的類
及其繼承關(guān)系iosistreamo標(biāo)準(zhǔn)流對象輸入流對象:cin與標(biāo)準(zhǔn)輸入設(shè)備相連輸出流對象:cout與標(biāo)準(zhǔn)輸出設(shè)備相連
cerr與標(biāo)準(zhǔn)錯誤輸出設(shè)備相連非緩沖輸出
clog與標(biāo)準(zhǔn)錯誤輸出設(shè)備相連緩沖輸出9.標(biāo)準(zhǔn)流對象輸入流對象:cin與標(biāo)準(zhǔn)輸入設(shè)備相連9.輸出流流插入運(yùn)算符<<cout<<“Goodmorning!\n”;不刷新緩沖區(qū)
cout<<“Good”;不刷新緩沖區(qū)
cout<<“morning!”;不刷新緩沖區(qū)
cout<<endl;刷新緩沖區(qū)
cout<<flush;刷新緩沖區(qū)10.輸出流流插入運(yùn)算符<<10.輸出流用成員函數(shù)put輸出字符
cout.put(‘A’);put的連續(xù)使用
cout.put(‘A’).put(‘a(chǎn)’);
11.輸出流用成員函數(shù)put輸出字符11.輸入流讀取運(yùn)算的返回值重載>>運(yùn)算符的定義:istream&operator>>(istream&input,A&a){…….returninput;}
返回的是輸入流的引用(引用本身是地址),在讀取不成功時,該地址被置成0.所以可以用如下方法判輸入結(jié)束:intx;
while(cin>>x){…}12.輸入流讀取運(yùn)算的返回值12.輸入流成員函數(shù)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()返回輸入是否結(jié)束標(biāo)志.13.輸入流成員函數(shù)13.輸入流其它函數(shù)cin.peek();返回下一個字符,但不從流中去掉.putback(charch);將字符ch放回輸入流ignore(intnCount=1,intdelim=EOF);
從流中刪掉最多nCount個字符,遇到EOF時結(jié)束。14.輸入流其它函數(shù)14.無格式輸入輸出用read,write進(jìn)行指定字節(jié)數(shù)的輸入輸出constintSIZE=80;charbuffer[SIZE];cin.read(buffer,20);cout.write(buffer,cin.gcount());//gcount返回上次讀入的字節(jié)數(shù)cout<<endl;輸入:Usingtheread,writeandgcountmemberfunctions
輸出:Usingtheread,write15.無格式輸入輸出用read,write進(jìn)行指定字節(jié)數(shù)的輸流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex,setbase浮點(diǎn)數(shù)的精度(precision,setprecision)設(shè)置域?qū)?setw,width)用戶自定義的流操縱算子使用流操縱算子需要#include<iomanip>16.流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex,s流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hexintn=10;cout<<n<<endl;cout<<hex<<n<<“\n”<<dec<<n<<“\n”<<oct<<n<<endl;輸出結(jié)果:
10a101217.流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex17控制浮點(diǎn)數(shù)精度的流操縱算子precision,setprecisionprecision是成員函數(shù),其調(diào)用方式為:
cout.precision(5);setprecision是流操作算子,其調(diào)用方式為:
cout>>setprecision(5);//可以連續(xù)輸出它們的功能相同。指定輸出浮點(diǎn)數(shù)的有效位數(shù)18.控制浮點(diǎn)數(shù)精度的流操縱算子precision,setpre
浮點(diǎn)數(shù)輸出最多6位有效數(shù)字#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;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1.23457e+00612.345712345671219.浮點(diǎn)數(shù)輸出最多6位有效數(shù)字#include<iostre
以小數(shù)點(diǎn)位置固定的方式輸出#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;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1234567.89000012.34567012345671220.以小數(shù)點(diǎn)位置固定的方式輸出#include<iostre
取消以小數(shù)點(diǎn)位置固定的方式輸出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl<<
resetiosflags(ios::fixed)<<x;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1234567.8900001.23457e+00621.取消以小數(shù)點(diǎn)位置固定的方式輸出#include<iost設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)兩者功能相同,一個是成員函數(shù),另一個是流操作算子,調(diào)用方式不同:cin>>setw(5);或者cin.width(5);cout<<setw(5);或者cout.width(5);
22.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)22.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?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.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)23.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)需要注意的是在每次讀入和輸出之前都要設(shè)置寬度。例如:
charstr[10];輸入:1234567890cin.width(5);輸出:1234cin>>string;567890cout<<string<<endl;cin>>string;cout<<string<<endl;24.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)24.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)需要注意的是在每次讀入和輸出之前都要設(shè)置寬度。例如:
charstr[10];輸入:1234567890cin.width(5);輸出:1234cin>>string;5678cout<<string<<endl;
cin.width(5);cin>>string;cout<<string<<endl;25.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)25.用戶自定義流操縱算子ostream&tab(ostream&output){returnoutput<<'\t';}cout<<“aa”<<tab<<“bb”<<endl;輸出:aa bb為什么可以?26.用戶自定義流操縱算子ostream&tab(ostream用戶自定義流操縱算子因?yàn)閕ostream里對<<進(jìn)行了重載(成員函數(shù))ostream&operator<<(ostream&(*p)(ostream&));27.用戶自定義流操縱算子因?yàn)閕ostream里對<<進(jìn)行文件操作數(shù)據(jù)的層次文件和流建立順序文件文件的讀寫指針有格式讀寫無格式讀寫28.文件操作數(shù)據(jù)的層次28.數(shù)據(jù)的層次位bit字節(jié)byte域/記錄 例如:學(xué)生記錄
intID;charname[10];intage;intrank[10];我們將所有記錄順序地寫入一個文件,稱為順序文件。29.數(shù)據(jù)的層次位bit29.文件和流可以將順序文件看作一個有限字符構(gòu)成的順序字符流,然后象對cin,cout一樣的讀寫?;仡櫼幌螺斎胼敵隽黝惖慕Y(jié)構(gòu)層次:iosistreamostreamifstreamiostreamofstreamfstream30.文件和流可以將順序文件看作一個有限字符構(gòu)成的順序字符流,然后建立順序文件#include<fstream.h>//包含頭文件ofstreamoutFile(“clients.dat”,ios::out|ios::binary);//打開文件ofstream是fstream中定義的類outFile是我們定義的ofstream類的對象“clients.dat”是將要建立的文件的文件名ios::out是打開并建立文件的選項(xiàng)ios:out輸出到文件,刪除原有內(nèi)容ios::app輸出到文件,保留原有內(nèi)容,總是在尾部添加ios::ate輸出到文件,保留原有內(nèi)容,可以在文件任意位置添加ios::binary以二進(jìn)制文件格式打開文件31.建立順序文件#include<fstream.h>/建立順序文件也可以先創(chuàng)建ofstream對象,再用open函數(shù)打開
ofstreamfout; fout.open("test.out",ios::out|ios::binary);判斷打開是否成功:
if(!fout){cerr<<“Fileopenerror!”<<endl;}32.建立順序文件也可以先創(chuàng)建ofstream對象,再用open文件的讀寫指針對于輸入文件,有一個讀指針;對于輸出文件,有一個寫指針;對于輸入輸出文件,有一個讀寫指針;標(biāo)識文件操作的當(dāng)前位置,該指針在哪里,讀寫操作就在哪里進(jìn)行。33.文件的讀寫指針對于輸入文件,有一個讀指針;33.文件的讀寫指針ofstreamfout(“a1.out”,ios::ate);longlocation=fout.tellp();//取得寫指針的位置location=10L;fout.seekp(location);//將寫指針移動到第10個字節(jié)處fout.seekp(location,ios::beg);//從頭數(shù)locationfout.seekp(location,ios::cur);//從當(dāng)前位置數(shù)locationfout.seekp(location,ios::end);//從尾部數(shù)locationlocation可以為負(fù)值34.文件的讀寫指針ofstreamfout(“a1.out”文件的讀寫指針ifstreamfin(“a1.in”,ios::ate);longlocation=fin.tellg();//取得讀指針的位置location=10L;fin.seekg(location);//將讀指針移動到第10個字節(jié)處fin.seekg(location,ios::beg);//從頭數(shù)locationfin.seekg(location,ios::cur);//從當(dāng)前位置數(shù)locationfin.seekg(location,ios::end);//從尾部數(shù)locationlocation可以為負(fù)值35.文件的讀寫指針ifstreamfin(“a1.in”,i字符文件讀寫因?yàn)槲募饕彩橇鳎郧懊嬷v過的流的成員函數(shù)和流操作算子也同樣適用于文件流。寫一個程序,將文件in.txt里面的整數(shù)排序后,輸出到out.txt例如,若in.txt的內(nèi)容為:12349456879則執(zhí)行本程序后,生成的out.txt的內(nèi)容為:1694523487936.字符文件讀寫因?yàn)槲募饕彩橇?,所以前面講過的流的成員函數(shù)和流#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.二進(jìn)制文件讀寫intx=10;fout.seekp(20,ios::beg);fout.write(constchar*)(&x),sizeof(int));fin.seekg(0,ios::beg);fin.read((char*)(&x),sizeof(int));二進(jìn)制文件讀寫,直接寫二進(jìn)制數(shù)據(jù),記事本看未必正確。38.二進(jìn)制文件讀寫intx=10;38.二進(jìn)制文件讀寫//下面的程序從鍵盤輸入幾個學(xué)生的姓名的成績,并以二進(jìn)制//文件形式存起來#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};39.二進(jìn)制文件讀寫//下面的程序從鍵盤輸入幾個學(xué)生的姓名的成績,intmain(){ CStudents; ofstreamOutFile("c:\\tmp\\students.dat", ios::out||ios::binary); while(cin>>s.szName>>s.nScore){ if(stricmp(s.szName,“exit”)==0)//名字為exit則結(jié)束 break; OutFile.write((char*)&s,sizeof(s)); } OutFile.close(); return0;}40.intmain()40.輸入:
Tom60Jack80Jane40exit0則形成的students.dat為72字節(jié),用記事本打開,呈現(xiàn):Tom燙燙燙燙燙燙燙燙<Jack燙燙燙燙燙燙燙蘌Jane燙燙燙燙燙燙燙?41.輸入:41.二進(jìn)制文件讀寫//下面的程序?qū)tudents.dat文件的內(nèi)容讀出并顯示#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};42.二進(jìn)制文件讀寫//下面的程序?qū)tudents.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();//看剛才讀了多少字節(jié) cout<<s.szName<<""<<s.nScore<<endl; } InFile.close(); return0;}輸出:Tom60Jack80Jmain()43.二進(jìn)制文件讀寫//下面的程序?qū)tudents.dat文件的Jane的名字改成Mike#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};44.二進(jìn)制文件讀寫//下面的程序?qū)tudents.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.顯式關(guān)閉文件ifstreamfin(“test.dat”,ios::in);fin.close();ofstreamfout(“test.dat”,ios::out);fout.close();46.顯式關(guān)閉文件ifstreamfin(“test.dat”,命令行參數(shù)啟動程序運(yùn)行時可以指定命令行參數(shù)方式一開始-〉運(yùn)行-〉輸入cmd,按確定-〉dos窗口可以用cd切換當(dāng)前目錄:...cd子目錄等等來到程序所在目錄,啟動程序:myprogramarg1arg2或者在任意目錄下,啟動程序:e://me//aaarg1arg2絕對路徑和相對路經(jīng)的概念方式二在vc編程環(huán)境中:project->settings->debug->programarguments47.命令行參數(shù)啟動程序運(yùn)行時可以指定命令行參數(shù)47.命令行參數(shù)intmain(intargc,char*argv[]){cout<<argc<<endl;for(inti=0;i<argc;i++)cout<<argv[i]<<endl;return0;}第一個參數(shù)為命令本身,第二個以后為參數(shù)48.命令行參數(shù)intmain(intargc,char*命令行參數(shù)若上面程序可執(zhí)行文件名為sampl.exe,則在命令行輸入:smaplefile1a.txts輸出結(jié)果為4tmp.exe-vtest.txt249.命令行參數(shù)若上面程序可執(zhí)行文件名為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();//打開的文件一定要關(guān)閉
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();//打開的文件一定要關(guān)閉
return0; } charc; while(inFile.get(c))//每次讀取一個字符
outFile.put(c); //每次寫入一個字符
outFile.close(); inFile.close(); return0;}51. ifstreaminFile(argv[1],ios::程序設(shè)計實(shí)習(xí)輸入輸出流和文件操作52.程序設(shè)計實(shí)習(xí)1.輸入輸出流流的概念模型C++中與流操作相關(guān)的類及其繼承關(guān)系輸入輸出流對象:cin,cout,cerr,clog輸出流輸入流無格式輸入輸出流操縱算子流格式狀態(tài)53.輸入輸出流流的概念模型2.流的概念模型流-可以看作一個無限長的二進(jìn)制數(shù)字序列通過讀寫指針進(jìn)行流的讀和寫(以字節(jié)為單位)
~10101110~~10101110~將流上的數(shù)據(jù)讀進(jìn)變量x1010111011100010將y的值寫入流yx54.流的概念模型流-可以看作一個無限長的二進(jìn)制數(shù)字序列~流的概念模型輸出流可以看作一端無限,另一端通過寫指針不停地向后寫入新內(nèi)容的單向流,1100011010~寫指針55.流的概念模型輸出流1100011010~寫指針4.流的概念模型輸入流可以看作一端無限,另一端通過讀指針不停地從流中讀取新內(nèi)容的單向流,讀出的內(nèi)容從流中刪去。1100011010~讀指針56.流的概念模型輸入流1100011010~讀指針5.有格式讀寫和無格式讀寫
字符方式/二進(jìn)制方式讀寫有格式讀寫,以某種數(shù)據(jù)類型為單位讀寫例如:讀一個整數(shù),寫一個浮點(diǎn)數(shù)等;無格式讀寫,以字節(jié)為單位讀寫,不區(qū)分其中的內(nèi)容例如:讀20個字節(jié),寫50個字節(jié)等;57.有格式讀寫和無格式讀寫
字符方式/二進(jìn)制方式讀寫有格式讀寫,緩沖區(qū)刷新向輸出流中寫數(shù)據(jù)時,通常是先向緩沖區(qū)中寫,當(dāng)緩沖區(qū)寫滿時,才真正向輸出流寫;也可以通過函數(shù)在程序中主動將緩沖區(qū)內(nèi)容寫入輸出流。58.緩沖區(qū)刷新向輸出流中寫數(shù)據(jù)時,通常是先向緩沖區(qū)中寫,當(dāng)緩沖區(qū)C++中與流操作相關(guān)的類
及其繼承關(guān)系iosistreamostreamifstreamiostreamofstreamfstream59.C++中與流操作相關(guān)的類
及其繼承關(guān)系iosistreamo標(biāo)準(zhǔn)流對象輸入流對象:cin與標(biāo)準(zhǔn)輸入設(shè)備相連輸出流對象:cout與標(biāo)準(zhǔn)輸出設(shè)備相連
cerr與標(biāo)準(zhǔn)錯誤輸出設(shè)備相連非緩沖輸出
clog與標(biāo)準(zhǔn)錯誤輸出設(shè)備相連緩沖輸出60.標(biāo)準(zhǔn)流對象輸入流對象:cin與標(biāo)準(zhǔn)輸入設(shè)備相連9.輸出流流插入運(yùn)算符<<cout<<“Goodmorning!\n”;不刷新緩沖區(qū)
cout<<“Good”;不刷新緩沖區(qū)
cout<<“morning!”;不刷新緩沖區(qū)
cout<<endl;刷新緩沖區(qū)
cout<<flush;刷新緩沖區(qū)61.輸出流流插入運(yùn)算符<<10.輸出流用成員函數(shù)put輸出字符
cout.put(‘A’);put的連續(xù)使用
cout.put(‘A’).put(‘a(chǎn)’);
62.輸出流用成員函數(shù)put輸出字符11.輸入流讀取運(yùn)算的返回值重載>>運(yùn)算符的定義:istream&operator>>(istream&input,A&a){…….returninput;}
返回的是輸入流的引用(引用本身是地址),在讀取不成功時,該地址被置成0.所以可以用如下方法判輸入結(jié)束:intx;
while(cin>>x){…}63.輸入流讀取運(yùn)算的返回值12.輸入流成員函數(shù)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()返回輸入是否結(jié)束標(biāo)志.64.輸入流成員函數(shù)13.輸入流其它函數(shù)cin.peek();返回下一個字符,但不從流中去掉.putback(charch);將字符ch放回輸入流ignore(intnCount=1,intdelim=EOF);
從流中刪掉最多nCount個字符,遇到EOF時結(jié)束。65.輸入流其它函數(shù)14.無格式輸入輸出用read,write進(jìn)行指定字節(jié)數(shù)的輸入輸出constintSIZE=80;charbuffer[SIZE];cin.read(buffer,20);cout.write(buffer,cin.gcount());//gcount返回上次讀入的字節(jié)數(shù)cout<<endl;輸入:Usingtheread,writeandgcountmemberfunctions
輸出:Usingtheread,write66.無格式輸入輸出用read,write進(jìn)行指定字節(jié)數(shù)的輸流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex,setbase浮點(diǎn)數(shù)的精度(precision,setprecision)設(shè)置域?qū)?setw,width)用戶自定義的流操縱算子使用流操縱算子需要#include<iomanip>67.流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex,s流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hexintn=10;cout<<n<<endl;cout<<hex<<n<<“\n”<<dec<<n<<“\n”<<oct<<n<<endl;輸出結(jié)果:
10a101268.流操縱算子整數(shù)流的基數(shù):流操縱算子dec,oct,hex17控制浮點(diǎn)數(shù)精度的流操縱算子precision,setprecisionprecision是成員函數(shù),其調(diào)用方式為:
cout.precision(5);setprecision是流操作算子,其調(diào)用方式為:
cout>>setprecision(5);//可以連續(xù)輸出它們的功能相同。指定輸出浮點(diǎn)數(shù)的有效位數(shù)69.控制浮點(diǎn)數(shù)精度的流操縱算子precision,setpre
浮點(diǎn)數(shù)輸出最多6位有效數(shù)字#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;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1.23457e+00612.345712345671270.浮點(diǎn)數(shù)輸出最多6位有效數(shù)字#include<iostre
以小數(shù)點(diǎn)位置固定的方式輸出#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;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1234567.89000012.34567012345671271.以小數(shù)點(diǎn)位置固定的方式輸出#include<iostre
取消以小數(shù)點(diǎn)位置固定的方式輸出#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ doublex=1234567.89; cout<<setiosflags(ios::fixed)<< setprecision(6)<<x<<endl<<
resetiosflags(ios::fixed)<<x;}控制浮點(diǎn)數(shù)精度的流操縱算子輸出:1234567.8900001.23457e+00672.取消以小數(shù)點(diǎn)位置固定的方式輸出#include<iost設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)兩者功能相同,一個是成員函數(shù),另一個是流操作算子,調(diào)用方式不同:cin>>setw(5);或者cin.width(5);cout<<setw(5);或者cout.width(5);
73.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)22.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?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.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)23.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)需要注意的是在每次讀入和輸出之前都要設(shè)置寬度。例如:
charstr[10];輸入:1234567890cin.width(5);輸出:1234cin>>string;567890cout<<string<<endl;cin>>string;cout<<string<<endl;75.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)24.設(shè)置域?qū)挼牧鞑倏v算子
設(shè)置域?qū)?setw,width)需要注意的是在每次讀入和輸出之前都要設(shè)置寬度。例如:
charstr[10];輸入:1234567890cin.width(5);輸出:1234cin>>string;5678cout<<string<<endl;
cin.width(5);cin>>string;cout<<string<<endl;76.設(shè)置域?qū)挼牧鞑倏v算子設(shè)置域?qū)?setw,width)25.用戶自定義流操縱算子ostream&tab(ostream&output){returnoutput<<'\t';}cout<<“aa”<<tab<<“bb”<<endl;輸出:aa bb為什么可以?77.用戶自定義流操縱算子ostream&tab(ostream用戶自定義流操縱算子因?yàn)閕ostream里對<<進(jìn)行了重載(成員函數(shù))ostream&operator<<(ostream&(*p)(ostream&));78.用戶自定義流操縱算子因?yàn)閕ostream里對<<進(jìn)行文件操作數(shù)據(jù)的層次文件和流建立順序文件文件的讀寫指針有格式讀寫無格式讀寫79.文件操作數(shù)據(jù)的層次28.數(shù)據(jù)的層次位bit字節(jié)byte域/記錄 例如:學(xué)生記錄
intID;charname[10];intage;intrank[10];我們將所有記錄順序地寫入一個文件,稱為順序文件。80.數(shù)據(jù)的層次位bit29.文件和流可以將順序文件看作一個有限字符構(gòu)成的順序字符流,然后象對cin,cout一樣的讀寫?;仡櫼幌螺斎胼敵隽黝惖慕Y(jié)構(gòu)層次:iosistreamostreamifstreamiostreamofstreamfstream81.文件和流可以將順序文件看作一個有限字符構(gòu)成的順序字符流,然后建立順序文件#include<fstream.h>//包含頭文件ofstreamoutFile(“clients.dat”,ios::out|ios::binary);//打開文件ofstream是fstream中定義的類outFile是我們定義的ofstream類的對象“clients.dat”是將要建立的文件的文件名ios::out是打開并建立文件的選項(xiàng)ios:out輸出到文件,刪除原有內(nèi)容ios::app輸出到文件,保留原有內(nèi)容,總是在尾部添加ios::ate輸出到文件,保留原有內(nèi)容,可以在文件任意位置添加ios::binary以二進(jìn)制文件格式打開文件82.建立順序文件#include<fstream.h>/建立順序文件也可以先創(chuàng)建ofstream對象,再用open函數(shù)打開
ofstreamfout; fout.open("test.out",ios::out|ios::binary);判斷打開是否成功:
if(!fout){cerr<<“Fileopenerror!”<<endl;}83.建立順序文件也可以先創(chuàng)建ofstream對象,再用open文件的讀寫指針對于輸入文件,有一個讀指針;對于輸出文件,有一個寫指針;對于輸入輸出文件,有一個讀寫指針;標(biāo)識文件操作的當(dāng)前位置,該指針在哪里,讀寫操作就在哪里進(jìn)行。84.文件的讀寫指針對于輸入文件,有一個讀指針;33.文件的讀寫指針ofstreamfout(“a1.out”,ios::ate);longlocation=fout.tellp();//取得寫指針的位置location=10L;fout.seekp(location);//將寫指針移動到第10個字節(jié)處fout.seekp(location,ios::beg);//從頭數(shù)locationfout.seekp(location,ios::cur);//從當(dāng)前位置數(shù)locationfout.seekp(location,ios::end);//從尾部數(shù)locationlocation可以為負(fù)值85.文件的讀寫指針ofstreamfout(“a1.out”文件的讀寫指針ifstreamfin(“a1.in”,ios::ate);longlocation=fin.tellg();//取得讀指針的位置location=10L;fin.seekg(location);//將讀指針移動到第10個字節(jié)處fin.seekg(location,ios::beg);//從頭數(shù)locationfin.seekg(location,ios::cur);//從當(dāng)前位置數(shù)locationfin.seekg(location,ios::end);//從尾部數(shù)locationlocation可以為負(fù)值86.文件的讀寫指針ifstreamfin(“a1.in”,i字符文件讀寫因?yàn)槲募饕彩橇?,所以前面講過的流的成員函數(shù)和流操作算子也同樣適用于文件流。寫一個程序,將文件in.txt里面的整數(shù)排序后,輸出到out.txt例如,若in.txt的內(nèi)容為:12349456879則執(zhí)行本程序后,生成的out.txt的內(nèi)容為:1694523487987.字符文件讀寫因?yàn)槲募饕彩橇鳎郧懊嬷v過的流的成員函數(shù)和流#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.二進(jìn)制文件讀寫intx=10;fout.seekp(20,ios::beg);fout.write(constchar*)(&x),sizeof(int));fin.seekg(0,ios::beg);fin.read((char*)(&x),sizeof(int));二進(jìn)制文件讀寫,直接寫二進(jìn)制數(shù)據(jù),記事本看未必正確。89.二進(jìn)制文件讀寫intx=10;38.二進(jìn)制文件讀寫//下面的程序從鍵盤輸入幾個學(xué)生的姓名的成績,并以二進(jìn)制//文件形式存起來#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};90.二進(jìn)制文件讀寫//下面的程序從鍵盤輸入幾個學(xué)生的姓名的成績,intmain(){ CStudents; ofstreamOutFile("c:\\tmp\\students.dat", ios::out||ios::binary); while(cin>>s.szName>>s.nScore){ if(stricmp(s.szName,“exit”)==0)//名字為exit則結(jié)束 break; OutFile.write((char*)&s,sizeof(s)); } OutFile.close(); return0;}91.intmain()40.輸入:
Tom60Jack80Jane40exit0則形成的students.dat為72字節(jié),用記事本打開,呈現(xiàn):Tom燙燙燙燙燙燙燙燙<Jack燙燙燙燙燙燙燙蘌Jane燙燙燙燙燙燙燙?92.輸入:41.二進(jìn)制文件讀寫//下面的程序?qū)tudents.dat文件的內(nèi)容讀出并顯示#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};93.二進(jìn)制文件讀寫//下面的程序?qū)tudents.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();//看剛才讀了多少字節(jié) cout<<s.szName<<""<<s.nScore<<endl; } InFile.close(); return0;}輸出:Tom60Jack80Jmain()43.二進(jìn)制文件讀寫//下面的程序?qū)tudents.dat文件的Jane的名字改成Mike#include<iostream>#include<fstream>usingnamespacestd;classCStudent{ public: charszName[20]; intnScore;};95.二進(jìn)制文件讀寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國DPO即服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 山東省青島市高三第一次模擬考試語文試卷(含答案)
- 2025物業(yè)管理公司勞務(wù)合同
- 小額貸款居間合同范文
- 2025展板制作合同
- 連帶共同擔(dān)保合同簽訂
- 建設(shè)圍墻施工合同
- 提高團(tuán)隊(duì)效能與績效改進(jìn)
- 2025建筑工程居間合同
- 聘用人才勞動合同
- 旅居管家策劃方案
- 車間消防安全知識培訓(xùn)課件
- 勞動法概述勞動法與新經(jīng)濟(jì)業(yè)態(tài)的結(jié)合
- 華為經(jīng)營管理-華為的研發(fā)管理(6版)
- 鋰離子電池生產(chǎn)工藝流程圖
- 平衡計分卡-化戰(zhàn)略為行動
- 幼兒園小班下學(xué)期期末家長會PPT模板
- 礦山安全培訓(xùn)課件-地下礦山開采安全技術(shù)
- GB/T 6417.1-2005金屬熔化焊接頭缺欠分類及說明
- 《社會主義市場經(jīng)濟(jì)理論(第三版)》第七章社會主義市場經(jīng)濟(jì)規(guī)則論
- 《腰椎間盤突出》課件
評論
0/150
提交評論