




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年珠海市横琴粤澳深度合作区招聘公办幼儿园教职工真题
- 2024年衢州市常山县卫健系统招考专业技术人员真题
- 2024年武汉设计工程学院辅导员考试真题
- 2024年亳州蒙城县城区学校农村教师竞岗真题
- 竹代塑产品的市场接受度与消费者认知
- 国内外低碳经济与绿色金融关系的比较分析
- 信息记录管理制度
- 信用安全管理制度
- 信访接待管理制度
- 公司内外务管理制度
- 国家开放大学2025年《创业基础》形考任务3答案
- SL631水利水电工程单元工程施工质量验收标准第1部分:土石方工程
- 2023-2024学年江苏省苏州市高二下学期6月期末物理试题(解析版)
- LNG加气站质量管理手册
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 儿童手机设计报告
- 防眩板施工组织设计
- 公路交通工程及安全设施施工指导意见
- 干式变压器企业标准
- 国家开放大学《流通概论》章节测试参考答案
- 中小学厕所蹲位数量统计表
评论
0/150
提交评论