版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《傳感器與檢測(cè)技術(shù)》練習(xí)題集
- 【初中物理】光的折射單元測(cè)試(培優(yōu)卷)2024-2025學(xué)年蘇科版物理八年級(jí)上冊(cè)
- 2023年標(biāo)準(zhǔn)員之基礎(chǔ)知識(shí)練習(xí)題(二)及答案
- 唐山-PEP-2024年11版小學(xué)三年級(jí)英語(yǔ)第1單元真題
- 2024年07版小學(xué)5年級(jí)上冊(cè)英語(yǔ)第二單元期末試卷
- 收納箱生產(chǎn)企業(yè)的賬務(wù)處理-記賬實(shí)操
- 中建信息化管理手冊(cè)
- 強(qiáng)化研究-團(tuán)結(jié)協(xié)作-共創(chuàng)佳績(jī)
- 經(jīng)濟(jì)數(shù)學(xué) 課件 ch01 函數(shù)、極限及其應(yīng)用
- 2024年高考語(yǔ)文二輪復(fù)習(xí):語(yǔ)言的表達(dá)效果類(lèi)新題型(練習(xí))(解析版)
- 2023-2024學(xué)年深圳市初三中考適應(yīng)性考試英語(yǔ)試題(含答案)
- 《漏電保護(hù)器》課件
- 巖質(zhì)高陡邊坡穩(wěn)定性分析評(píng)價(jià)
- 私立民辦高中學(xué)校項(xiàng)目招商引資方案
- 工商管理學(xué)科發(fā)展前沿
- 【臨床貓瘟的診斷與治療3500字(論文)】
- 新能源汽車(chē)技術(shù)職業(yè)生涯人物訪談報(bào)告
- 天津市武清區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期中地理試題【含答案解析】
- 山東省臨沂市沂水縣2023-2024學(xué)年八年級(jí)上學(xué)期期中數(shù)學(xué)試題
- 基于DHMM和VQ的關(guān)鍵詞識(shí)別研究與實(shí)現(xiàn)的開(kāi)題報(bào)告
- 2024屆安徽省安師大附中化學(xué)高一第一學(xué)期期中檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論