老師課件描述補(bǔ)充輸入輸出_第1頁
老師課件描述補(bǔ)充輸入輸出_第2頁
老師課件描述補(bǔ)充輸入輸出_第3頁
老師課件描述補(bǔ)充輸入輸出_第4頁
老師課件描述補(bǔ)充輸入輸出_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)I/O北京理工大學(xué)信息與電子學(xué)院白霞主要內(nèi)容基本I/O文件I/O基本I/OC++提供了流(stream)式輸入輸出標(biāo)準(zhǔn)輸入/輸出庫就是頭文件iostreamostreamcout;istreamcin;cout<<C++datacin>>C++data預(yù)定義的流對(duì)象標(biāo)準(zhǔn)輸出流與標(biāo)準(zhǔn)輸出顯示器相關(guān)聯(lián)標(biāo)準(zhǔn)輸入流與標(biāo)準(zhǔn)輸入設(shè)備鍵盤相關(guān)聯(lián)常用的輸出控制控制輸出寬度控制填充字符控制對(duì)齊方式控制輸出精度方式1:使用格式操作符<iomanip.h>方式2:成員函數(shù)控制輸出寬度通常在輸出數(shù)據(jù)表格時(shí),希望數(shù)據(jù)保持輸出同樣的寬度以便使每行的數(shù)據(jù)保持整齊在沒有控制時(shí),cout語句輸出為可變寬度(所有數(shù)值右對(duì)齊)使用setw控制寬度

setw(intn)含義:設(shè)置域?qū)挒閚說明使用格式操作符,需要包含iomanip.h,或者設(shè)置setw必須在每個(gè)送至cout的數(shù)值之前使用才有效如果數(shù)據(jù)的寬度大于setw定義寬度,就忽略setw的作用而按實(shí)際長度輸出全部的數(shù)值#include<iostream>#include<iomanip>usingnamespacestd;另一種控制寬度的方式intwidth(intn);注意:不是一直有效,僅對(duì)下一cout語句作用控制填充字符填充字符一般為空格可以改變填充字符比如打印會(huì)計(jì)轉(zhuǎn)賬支票金額時(shí)(‘*’)是很有用的,可以使金額不會(huì)被更改。使用setfill

setfill(charc)含義:設(shè)置填充字符另一種方式charfill(charc);控制對(duì)齊方式setiosflags(longf)含義:設(shè)置由f說明的格式resetiosflags(longf)含義:清除由f說明的格式格式標(biāo)志常量格式標(biāo)志名含義ios::left輸出數(shù)據(jù)按域?qū)捵髮?duì)齊輸出ios::right輸出數(shù)據(jù)按域?qū)捰覍?duì)齊輸出ios::scientific使用科學(xué)計(jì)數(shù)法表示浮點(diǎn)數(shù)ios::fixed使用定點(diǎn)形式表示浮點(diǎn)數(shù)ios::showpos在正數(shù)前添加一個(gè)’+’ios::showpoint浮點(diǎn)輸出時(shí)必須帶有一個(gè)數(shù)點(diǎn)ios::left另一種方式longsetf(longf)如cout.setf(iso::left)longunsetf(longf)如cout.unsetf(iso::left)控制輸出精度setprecision(intn)設(shè)置浮點(diǎn)精度為n,不管浮點(diǎn)表示法或者科學(xué)表示法,小數(shù)點(diǎn)后位數(shù),四舍五入處理。尾數(shù)填0和顯示+組合格式標(biāo)志,用操作符|分隔科學(xué)計(jì)數(shù)法另一種方式intprecision(intn)如cout.precision(2)緩沖數(shù)據(jù)的讀寫花費(fèi)時(shí)間很長(相對(duì)來說),程序的執(zhí)行經(jīng)常被讀寫所阻礙。為了解決這個(gè)問題,流提供了“緩沖”。數(shù)據(jù)寫到流中,但是并不是馬上寫到輸出終端。流的緩沖區(qū)不斷地被填充,當(dāng)緩沖區(qū)充滿時(shí),它就一次全部寫。填充緩沖區(qū)清空緩沖區(qū)重新填充緩沖區(qū)刷新緩沖區(qū)內(nèi)存C++程序BufferBuffercincout顯示器鍵盤輸出緩沖區(qū)的管理輸出緩沖區(qū)用于存儲(chǔ)程序讀寫的數(shù)據(jù),下面幾種情況將導(dǎo)致緩沖區(qū)的內(nèi)容被刷新,即寫入到真實(shí)的輸出設(shè)備或者文件:程序正常結(jié)束緩沖區(qū)滿了用操縱符,例如endl輸出流和輸入流關(guān)聯(lián)起來,在讀輸入流時(shí)刷新輸出流cout<<endl;將endl寫入輸出流時(shí),具有輸出換行的效果,并刷新與設(shè)備相關(guān)聯(lián)的緩沖區(qū)其它的一點(diǎn)說明cout.put()輸出字符,參數(shù)可以是字符或者字符的ASCII碼例:有一個(gè)字符串BASIC,要求把它反序輸出

CISAB#include<iostream>usingnamespacestd;intmain(){char*s=“BASIC”;for(inti=4;i>=0;i--)cout.put(*(s+i));cout.put(‘\n’);return0;}輸入的考慮cin>>cin.get()cin.getline()cin使用cin>>接收姓名只接收了baicin略過空的字符在第一個(gè)空白處停止用get()接收串get(char*cp,intlen[,charterminator])cin.get()接收輸入的全部字符,包括空白字符結(jié)束符默認(rèn)為‘\n’連續(xù)使用兩個(gè)get()函數(shù)的問題第二個(gè)get()沒有等待用戶輸入任何東西get()把‘\n’流在緩沖區(qū)用變量tmp存儲(chǔ)’\n’用getline()函數(shù)getline()把’\n’拋棄文件的I/O也是使用“流”頭文件<fstream>數(shù)據(jù)流對(duì)象需要自聲明關(guān)聯(lián)的文件也是自指定<iostream>cin/cout鍵盤/顯示器

內(nèi)存C++程序輸出文件數(shù)據(jù)流存儲(chǔ)設(shè)備輸入文件數(shù)據(jù)流BufferBuffer向文件順序地寫向文件中寫入字符數(shù)據(jù)使用類ofstream打開的文件是輸出文件,被認(rèn)為是剛建立的,如果文件已經(jīng)存在,老的文件被新的文件所覆蓋從串中向文件寫入字符使用put成員函數(shù)向文件中寫入字符數(shù)據(jù)更簡便的文件輸出方法使用操作符<<來操作字符向文件寫入數(shù)據(jù)和向屏幕寫入數(shù)據(jù)同樣容易寫入串從文件順序地讀不能用>>讀入空格、回車使用操作符>>來操作字符從文件中讀取字符流對(duì)象的值不為0讀取文件直到到達(dá)文件結(jié)束符eof(endoffile)從文件中讀取字符使用get成員函數(shù)從文件中讀取字符數(shù)據(jù)從文件中讀取串使用getline成員函數(shù)從文件中讀取字符串向文件順序地寫以追加方式文件的打開ofstream類,文件假設(shè)為輸出模式ifstream類,文件假設(shè)為輸入模式fstream類,調(diào)用open成員函數(shù)打開文件,將文件數(shù)據(jù)流連接到特定文件關(guān)閉文件,文件數(shù)據(jù)流與特定文件的連接關(guān)系結(jié)束fstreamvoidopen(constchar*filename,intmode,intaccess);

參數(shù):filename:要打開的文件名

mode:要打開文件的方式

access:打開文件的屬性ios::app:以追加的方式打開文件ios::ate:文件打開后定位到文件尾,ios:app就包含有此屬性ios::binary:以二進(jìn)制方式打開文件,缺省的方式是文本方式。ios::in:文件以輸入方式打開ios::out:文件以輸出方式打開,如果有同名文件則將其取代ios::nocreate:打開舊文件作為輸出之用,文件不存在時(shí)則放棄ios::noreplace:打開新文件為輸出之后,文件存在則放棄ios::trunc:如果文件存在,則清空原文件打開文件的方式打開文件的屬性0:普通文件,打開訪問1:只讀文件2:隱含文件4:系統(tǒng)文件使用open成員函數(shù)打開文件并在其中追加記錄appfile.close();二進(jìn)制文件的讀寫類數(shù)據(jù)和磁盤文件使用成員函數(shù)write把數(shù)據(jù)寫入文件使用成員函數(shù)read從文件中讀取數(shù)據(jù)讀和寫需要傳遞一個(gè)指向數(shù)據(jù)的字符指針,寫對(duì)象之前用(char*)進(jìn)行類型轉(zhuǎn)換需要確定字節(jié)大小,通常使用sizeof()函數(shù)istream&read(unsignedchar*buf,intnum);ostream&write(constunsignedchar*buf,intnum);隨機(jī)存取文件隨機(jī)訪問:向前,向后,某個(gè)記錄操作文件指針:文件指針總是指向用戶存取的記錄的下一個(gè)位置seekg和seekp是C++的兩個(gè)隨機(jī)訪問函數(shù)tellg和tellp返回當(dāng)前輸入/出流指針的位置seekg()是對(duì)輸入文件定位,它有兩個(gè)參數(shù):第一個(gè)參數(shù)是偏移量,第二個(gè)參數(shù)是基地址。

對(duì)于第一個(gè)參數(shù),可以是正負(fù)數(shù)值,正:表示向后偏移負(fù):表示向前偏移而第二個(gè)參數(shù)可以是:

ios::beg:表示輸入流的開始位置

ios::cur:表示輸入流的當(dāng)前位置

ios::end:表示輸入流的結(jié)束位置

seekgf.seekg(0,ios::beg);f.seekg(0,ios::end);f.seekg(25,ios::beg);f.seekg(-5,ios::cur);f.seekg(-10,ios::end);例如//指針移到文件頭//指針移到文件尾//指針移到文件頭后面25個(gè)字節(jié)處//指針移到當(dāng)前文件位置前面5個(gè)字節(jié)處//指針移到文件末尾前面10個(gè)字節(jié)處#include<fstream.h>#include<string.h>intmain(){ofstreamout("test",ios::out|ios::binary);

if(!out){cout<<"Cannotopenoutputfile.\n";

return1;}

doublenum=100.45;

charstr[]="Thisisatest";out.write((char*)&num,sizeof(double));out.write(str,strlen(str));out.close();

return0;}#include<fstream.h>intmain(){ifstreamin("test",ios::in|ios::binary);

if(!in){cout<<"Cannotopeninputfile.\n";

return1;}in.seekg(0,ios::end);

longl=in.tellg();in.seekg(0,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論