C-程序設(shè)計(jì)教學(xué)課件Chapter-2-IO-Streams_第1頁(yè)
C-程序設(shè)計(jì)教學(xué)課件Chapter-2-IO-Streams_第2頁(yè)
C-程序設(shè)計(jì)教學(xué)課件Chapter-2-IO-Streams_第3頁(yè)
C-程序設(shè)計(jì)教學(xué)課件Chapter-2-IO-Streams_第4頁(yè)
C-程序設(shè)計(jì)教學(xué)課件Chapter-2-IO-Streams_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論