




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C++ProgrammingChapter2I/OStreamsasanintroductiontoObjectsandClassesIndex
2.1StreamsandBasicFileI/O
2.2ToolsforstreamsI/O
2.3CharacterI/O
2.4InheritanceChap.2I/OStreams2.1StreamsandBasicFileI/OStreamsandbasicfileI/O
Streamsallowyoutowriteprogramsthathandlefileinputandkeyboardinputinaunifiedway,andthathandlefileoutputandscreenoutputinaunifiedway.
Astreamisaflowofcharacters.Iftheflowisintoyourprogram,thestreamiscalledaninputstream.Iftheflowisoutofyourprogram,thestreamiscalledoutputstream.
Iftheinputstreamflowsfromthekeyboard,thenyourprogramwilltakeinputfromthekeyboard.Iftheinputstreamflowsfromafile,thenyourprogramwilltakeitsinputfromthatfile.It’sSimilartooutputstream.StreamsandbasicfileI/O
Thecinisaninputstreamconnectedtothekeyboard,andcoutisanoutputstreamconnectedtothescreen.
Wecandefineotherstreamsthatcomefromorgotofiles;oncewehavedefinedthem,wecanusetheminthesamewayweusethestreamscinandcout.Forexample,astreamcalledin_streamisdefinedthatcomesfromsomefile:intthe_number;in_stream>>the_number;Anoutputstreamnamedout_streamisdefinedthatgoestoanotherfile:out_stream<<"the_numberis"<<the_number<<endl;
Oncethestreamsareconnectedtothedesiredfiles,yourprogramcandofileI/OthesamewayitdoesI/Ousingthekeyboardandscreen.WhyusefilesforI/O
Filesprovideyouwithawaytostoredatapermanently;
Youcancreateaninputfileforyourprogramorreadanoutputfileproducedbyyourprogramwheneverit’sconvenientforyou,asopposedtohavingtodoallyourreadingandwritingwhiletheprogramisrunning;
Filesalsoprovideyouwithaconvenientwaytodealwithlargequantitiesofdata.FileI/O
Whenyourprogramtakesinputfromafile,it’ssaidtobereadingfromthefile;whenyourprogramsendsoutputtoafile,it’ssaidtobewritingtothefile;
Themethodwewillusereadsthefilefromthebeginningtotheend.Usingthismethod,yourprogramisn’tallowedtobackupandreadanythinginthefileasecondtime,liketheoutputtothescreen.FileI/O
Thestreamscinandcoutarealreadydeclaredforyou,butifyouwantastreamtoconnectafile,youmustdeclareitjustasyouwoulddeclareanyothervariable.
Thetypeforinput-filestreamvariablesisnamedifstream,andthetypeforoutput-filestreamvariablesisnamedofstream.ifstreamin_stream;ofstreamout_stream;
Thetypesifstreamandofstreamaredefinedinthelibrarywiththeheaderfilefstream.#include<fstream>usingnamespacestd;FileI/O
Streamvariablesmusteachbeconnectedtoafile.Thisiscalledopeningthefileandisdonewithafunctionnamedopen.in_stream.open("infile.dat");
Iftheinputfileisinthesamedirectoryasyourprogram,youprobablycansimplygivethenameofthefile.Insomesituationsyoumightalsotospecifythedirectorythatcontainsthefile.FileI/O
Onceyouhavedeclaredaninputstreamvariableandconnectedittoafileusingtheopenfunction,yourprogramcantakeinputfromthefileusingtheextractionoperator>>.intone_number,another_number;in_stream>>one_number>>another_number;
Anoutputstreamisusedasthesamewayoftheinputstream.ofstreamout_stream;out_stream.open("outfile.dat");out_stream<<"one_number="<<one_number<<"another_number="<<another_number;FileI/O
Everyfileshouldbeclosedwhenyourprogramisfinishedgettinginputfromthefileorsendingoutputtothefile.Closingafiledisconnectsthestreamfromthefile.Afileisclosedwithacalltothefunctionclose.in_stream.close();out_stream.close();Checkwhetherafilewasopensuccessfully
Youcanusethememberfunctionnamedfailtotestwhetherastreamoperationhasfailed.Thereisamemberfunctionnamedfailforeachoftheclassesifstreamandofstream.
Youshouldplaceacalltofailimmediatelyaftereachcalltoopentocheckwhetherafilewasopenedsuccessfully,thefunctionfailwillreturntrueifthecalltoopenfails.in_stream.open("stuff.dat");if(in_stream.fail()){cout<<"Inputfileopenningfailed.\n";exit(1);}Chap.2I/OStreams2.2ToolsforstreamsI/OFormattingoutputwithstreamfunctions
Thelayoutofaprogram’soutputiscalledtheformatoftheoutput.
InC++youcancontroltheformatwithcommandsthatdeterminesuchdetailsasthenumberofspacesbetweenitemsandthenumberofdigitsafterthedecimalpoint.cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(2);Formattingoutputwithstreamfunctions
Everyoutputstreamhasamemberfunctionnamedprecision.Whenyourprogramexecutesacalltoprecision,thenfromthatpointoninyourprogram,anynumberwithadecimalpointthatisoutputtothatstreamwillbewrittenwithatotaloftwosignificantfigures,ofwithtwodigitsafterthedecimalpoint,dependingonwhenyourcompilerwaswritten.
Acalltoprecisionappliesonlytothestreamnamedinthecall.Ifyourprogramhasanotheroutputstreamout_stream_two,thenyouhavetocallthefunctionprecisiontoeffectonit.out_stream_two.precision(3);Formattingoutputwithstreamfunctions
setfisanabbreviationforsetflags.Aflagisaninstructiontodosomethinginoneoftwopossibleways.Ifaflagisgivenasanargumenttosetf,thentheflagtellsthecomputertowriteoutputtothatstreaminsomespecificway.Whatitcausesthestreamtododependsontheflag.
Anyflagthatissetmaybeunset.Tounsetaflag,youusethefunctionunsetf.cout.unsetf(ios::fixed);FormattingoutputwithstreamfunctionsFormattingFlagsforsetfFlagMeaningios::fixedFloating-pointnumbersarenotwrittenine-notationios::scientificios::showpointFloating-pointnumbersarewrittenine-notationAdecimalpointandtrailingzerosarealwaysshownforfloating-pointnumbersios::showposios::rightAplussignisoutputbeforepositivevaluesThenextitemoutputwillbeattherightendofthespacespecifiedbywidthios::leftThenextitemoutputwillbeattheleftendofthespacespecifiedbywidthFormattingoutputwithstreamfunctions
Oneverycommonlyusedformattingfunctioniswidth.cout<<"StartNow";cout.width(4);cout<<7<<endl;Theoutputis:StartNow7
Iftheoutputrequiredmorespacethanyouspecifiedintheargumenttowidth,thenasmuchadditionalspaceasisneededwillbeused.
Acalltowidthappliesonlytothenextitemthatisoutput.Ifyouwanttooutput12numbers,using4spacestooutputeachnumber,thenyoumustcallwidth12times.Manipulators
Amanipulatorisafunctionthatiscalledinanontraditionalway.Inturn,themanipulatorfunctioncallsamemberfunction.
Manipulatorsareplacedaftertheinsertionoperator<<,justasifmanipulatorfunctioncallwereanitemtobeoutput.
Liketraditionalfunctions,manipulatorsmayormaynothavearguments.
Tousethemanipulators,youmustincludethefollowingdirectiveinyourprogram:#include<iomanip>usingnamespacestd;Manipulators
Inputandoutputcanbeformattedusingmanipulators.ManipulatorsEffectendlWritenewlineandflushoutputstreamdechexInputoroutputindecimalInputoroutputinhexadecimalInputoroutputinoctalSetfieldwidthtonMakecthefillcharacterLeftjustifyRightjustifyoctsetw(n)setfill(c)leftrightManipulatorsExample1:inti=91;cout<<"i="<<i<<"(decimal)\n";cout<<"i="<<oct<<i<<"(octal)\n";cout<<"i="<<hex<<i<<"(hexadecimal)\n";cout<<"i="<<dec<<i<<"(decimal)\n";Output:i=91(decimal)i=133(octal)i=5b(hexadecimal)i=91(decimal)ManipulatorsExample2:floata=1.05,b=10.15,c=200.87;cout<<setfill('*')<<setprecision(4);cout<<setw(10)<<a<<endl;cout<<setw(10)<<b<<endl;cout<<setw(10)<<c<<endl;Output:******1.05*****10.15*****200.9Checkingfortheendofafile
Whenyouwriteaprogramthattakesitsinputfromafile,youwilloftenwanttheprogramtoreadallthedatainthefile,forexampletocalculatetheaverageofallthenumbersinthefile.Soyouneedtocheckfortheendofafile.doublenext,sum=0;intcount=0;while(Therearestillnumberstodoublenext,sum=0;intcount=0;while(in_stream>>next){beread){sum+=next;count++;in_stream>>next;sum+=next;count++;}Theaverageissum/count.}Theaverageissum/count++;Chap.2I/OStreams2.3CharacterI/OCharacterI/O
Alldataisinputandoutputascharacterdata.Whenyourprogramoutputsthenumber10,it’sreallythetwocharacters‘1’and‘0’thatareoutput.
Howeveryourprogramiswritten,thecomputerhardwareisalwaysreadingthecharacters‘1’and‘0’,notthenumber10.Thisconversionbetweencharactersandnumbersisusuallydoneautomaticallysothatyouneednotthinkaboutsuchdetail.
C++providessomelow-levelfacilitiesforinputandoutputofcharacterdata.Theselow-levelfacilitiesincludenoautomaticconversions.Thememberfunctionsgetandput
Thefunctiongetallowsyourprogramtoreadinonecharacterofinputandstoreitinavariableoftypechar.Everyinputstream,whetheritisaninputfilestreamorthestreamcin,hasgetasamemberfunction.charnext_symbol;cin.get(next_symbol);
Whenyouusetheextractionoperator>>,somethingsaredoneforyouautomatically,suchasskippingblanks.Withthememberfunctionget,nothingisdoneautomatically.Thememberfunctionsgetandput
It’simportanttonotethatyourprogramcanreadanycharacterinthisway.Ifthenextinputcharacterisablankoranew-linecharacter‘\n’,usinggetwillnotskipoverthecharacter.charc1,c2,c3;cin.get(c1);cin.get(c2);cin.get(c3);Iftheinputis:ABCDThen:c1='A';c2='B';c3='\n';Thememberfunctionsgetandput
Onethingyoucandowiththememberfunctiongetistohaveyourprogramdetecttheendofaline.cout<<"EnteralineofinputandIwillechoit:\n";charsymbol;do{cin.get(symbol);cout<<symbol;}while(symbol!='\n');cout<<"That'sallforthisdemonstration";
Thememberfunctionputisanalogoustothememberfunctiongetexceptthatit’susedforoutputratherthaninput.Putallowsyourprogramtooutputonecharacter.ProgrammingexampleCheckinginput#include<iostream.h>voidget_int(int&);voidmain(){voidget_int(int&number){charans;do{intn;get_int(n);cout<<"finalvaluereadis="<<n<<endl;cout<<"Enterinputnumber:";cin>>number;cout<<"Youentered"<<number<<"Isthatcorrect?}voidnew_line(){(yes/no):";cin>>ans;new_line();}while((ans!='Y')&&(ans!='y'));charsymbol;do{}cin.get(symbol);}while(symbol!='\n');}Theeofmemberfunction
Everyinput-filestreamhasamemberfunctioncalledeofthatcanbeusedtodeterminewhenallofthefilehasbeenreadandthereisnomoreinputleftfortheprogram.
Sinceweusuallywanttotestthatwearenotattheendofafile,acalltotheeofistypicallyusedwithanotinfrontofit.Exampleone:if(!fin.eof())cout<<"Notdoneyet.";elsecout<<"Endofthefile.";Exampletwo:in_stream.get(next);while(!in_stream.eof()){cout<<next;in_stream.get(next);}Chap.2I/OStreams2.4InheritanceInheritanceamongstreamclasses
Boththepredefinedstreamcinandaninput-filestreamareinputstreams,soinsomesensetheyaresimilar.
Theclassifstreamandistreamaredifferentbutcloselyrelatedtypes.Theclassifstreamisaderivedclassoftheclassistream.Inheritanceamongstreamclasses
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/TS 23164:2025 EN Automation systems and integration - Core vocabulary for industrial data
- 【正版授權(quán)】 ISO 7434:2024 EN Fasteners - Slotted set screws with cone point
- 2025年度展覽場地租賃合同保證金與押金繳納細(xì)則
- 2025年涼果蜜餞合作協(xié)議書
- 2025年度智慧交通樞紐包工施工合同(智能交通系統(tǒng))
- 2025房地產(chǎn)股權(quán)并購項目盡職調(diào)查及服務(wù)合同
- 2025年度智能家居標(biāo)準(zhǔn)私房買賣合同范文
- 增強知識管理的主管工作計劃
- 多元化班級文化的建設(shè)方法計劃
- 客戶投訴處理流程的總結(jié)與反思計劃
- 社區(qū)健康促進(jìn)工作計劃
- 2025年度移動端SEO服務(wù)及用戶體驗優(yōu)化合同
- 中小學(xué)《清明節(jié)活動方案》班會課件
- 中央2025年交通運輸部所屬事業(yè)單位招聘261人筆試歷年參考題庫附帶答案詳解
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯模擬試題(共500題)試卷后附參考答案
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計劃
- 2025年技術(shù)員個人工作計劃例文(四篇)
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級下冊+
- 人教鄂教版六年級下冊科學(xué)全冊知識點
- 急救藥品課件教學(xué)課件
- 鄭州市地圖含區(qū)縣可編輯可填充動畫演示矢量分層地圖課件模板
評論
0/150
提交評論