老師課件描述補充輸入輸出_第1頁
老師課件描述補充輸入輸出_第2頁
老師課件描述補充輸入輸出_第3頁
老師課件描述補充輸入輸出_第4頁
老師課件描述補充輸入輸出_第5頁
已閱讀5頁,還剩57頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

setfill(charc)含義:設置填充字符另一種方式charfill(charc);控制對齊方式setiosflags(longf)含義:設置由f說明的格式resetiosflags(longf)含義:清除由f說明的格式格式標志常量格式標志名含義ios::left輸出數據按域寬左對齊輸出ios::right輸出數據按域寬右對齊輸出ios::scientific使用科學計數法表示浮點數ios::fixed使用定點形式表示浮點數ios::showpos在正數前添加一個’+’ios::showpoint浮點輸出時必須帶有一個數點ios::left另一種方式longsetf(longf)如cout.setf(iso::left)longunsetf(longf)如cout.unsetf(iso::left)控制輸出精度setprecision(intn)設置浮點精度為n,不管浮點表示法或者科學表示法,小數點后位數,四舍五入處理。尾數填0和顯示+組合格式標志,用操作符|分隔科學計數法另一種方式intprecision(intn)如cout.precision(2)緩沖數據的讀寫花費時間很長(相對來說),程序的執行經常被讀寫所阻礙。為了解決這個問題,流提供了“緩沖”。數據寫到流中,但是并不是馬上寫到輸出終端。流的緩沖區不斷地被填充,當緩沖區充滿時,它就一次全部寫。填充緩沖區清空緩沖區重新填充緩沖區刷新緩沖區內存C++程序BufferBuffercincout顯示器鍵盤輸出緩沖區的管理輸出緩沖區用于存儲程序讀寫的數據,下面幾種情況將導致緩沖區的內容被刷新,即寫入到真實的輸出設備或者文件:程序正常結束緩沖區滿了用操縱符,例如endl輸出流和輸入流關聯起來,在讀輸入流時刷新輸出流cout<<endl;將endl寫入輸出流時,具有輸出換行的效果,并刷新與設備相關聯的緩沖區其它的一點說明cout.put()輸出字符,參數可以是字符或者字符的ASCII碼例:有一個字符串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略過空的字符在第一個空白處停止用get()接收串get(char*cp,intlen[,charterminator])cin.get()接收輸入的全部字符,包括空白字符結束符默認為‘\n’連續使用兩個get()函數的問題第二個get()沒有等待用戶輸入任何東西get()把‘\n’流在緩沖區用變量tmp存儲’\n’用getline()函數getline()把’\n’拋棄文件的I/O也是使用“流”頭文件<fstream>數據流對象需要自聲明關聯的文件也是自指定<iostream>cin/cout鍵盤/顯示器

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

參數:filename:要打開的文件名

mode:要打開文件的方式

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

對于第一個參數,可以是正負數值,正:表示向后偏移負:表示向前偏移而第二個參數可以是:

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

ios::cur:表示輸入流的當前位置

ios::end:表示輸入流的結束位置

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個字節處//指針移到當前文件位置前面5個字節處//指針移到文件末尾前面10個字節處#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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論