語言從入門到精通第16章c輸入輸出流_第1頁
語言從入門到精通第16章c輸入輸出流_第2頁
語言從入門到精通第16章c輸入輸出流_第3頁
語言從入門到精通第16章c輸入輸出流_第4頁
語言從入門到精通第16章c輸入輸出流_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++輸入輸出流標準輸出流對象cout其它輸出流對象標準輸出流對象cin使用格式控制符控制輸出格式用流對象的成員函數(shù)控制輸出格式用流成員函數(shù)put輸出字符用于字符輸入的流成員函數(shù)

istrearn類的其它成員函數(shù)標準輸出流對象cout

cout是consoleoutput的縮寫,意為在控制臺(終端顯示器)的輸出,它是ostream的派生類ostream_withassign的對象,它是從內(nèi)存輸入到標準輸出設(shè)備(顯示器)的數(shù)據(jù)流,稱為cout流或標準輸出流。cout不是C++預(yù)定義的關(guān)鍵字,它是ostream流類的對象,在iostream中定義。cout流是容納數(shù)據(jù)的載體,它并不是一個運算符。C++中的標準輸出是通過在cout數(shù)據(jù)流上重載運算符“<<”來實現(xiàn)的,其格式如下所示:cout<<表達式1<<表達式2<<…<<表達式n;格式說明:運算符“<<”又叫插入運算符,因為它將后面所跟的數(shù)據(jù)插入到它前面的數(shù)據(jù)流中?!痉独?6-6】將通過實例講述cout與插入運算符“<<”的使用方法其它輸出流對象

在C++的iostream頭文件中,還提供了另外2中輸出流對象,分別是cerr和clog,它們二者都向顯示器輸出出錯信息。cerr流對象是標準錯誤流,被指定為與顯示器關(guān)聯(lián)。cerr與標準輸出流cout的作用和用法差不多。但有一點不同,在于cout流通常是傳送到顯示器輸出,但也可以被重定向輸出到磁盤文件,而cerr流中的信息只能在顯示器輸出,并且cerr流中的信息是用戶根據(jù)需要指定的。clog流對象也是標準錯誤流,作用和cerr相同。它們之間的區(qū)別在于cerr不經(jīng)過緩沖區(qū),直接向顯示器上輸出信息,而clog中的信息存放在緩沖區(qū)中,緩沖區(qū)滿后或遇endl時向顯示器輸出?!痉独?6-7】將通過實例講述cerr和clog流對象的使用方法標準輸出流對象cin

C++的標準輸入流cin是istream的派生類istream_withassign的對象,它是從標準輸入設(shè)備(鍵盤)輸入到內(nèi)存的數(shù)據(jù)流,稱為cin流或標準輸入流。C++中的標準輸入是通過在cin數(shù)據(jù)流上重載運算符“>>”來實現(xiàn)的,它從標準輸入設(shè)備(鍵盤)獲取數(shù)據(jù),程序中的變量通過流提取符“>>”從流中提取數(shù)據(jù),通常跳過輸入流的空格、tab鍵、換行符等空白字符,其格式如下所示:cin>>變量1>>變量2>>…>>變量n;例如:inta,b;cin>>a>>b; //若從鍵盤上輸入21abc出錯只有在正常狀態(tài)時,才能從輸入流中提取數(shù)據(jù)。當遇到無效字符或遇到文件結(jié)束符(不是換行符,是文件中的數(shù)據(jù)已讀完)時,輸人流cin就處于出錯狀態(tài),即無法正常提取數(shù)據(jù)。此時對cin流的所有提取操作都將終止?!痉独?6-8】將通過實例講述cin流對象的使用方法使用格式控制符控制輸出格式

C++的I/O系統(tǒng)定義了一些用來管理I/O格式的控制函數(shù),它們不在類的封裝之內(nèi),表面上也不一定以函數(shù)調(diào)用的形式出現(xiàn),因此它們被稱為格式控制符,格式控制符包括有參和無參的控制符,分別在兩個頭文件中說明。不帶參數(shù)的操縱函數(shù)又叫操縱符,定義在頭文件iostream.h中,帶參數(shù)的操縱函數(shù)定義在頭文件iomanip.h中。iostream.h中的操縱符如表16.5所示,iomanip.h中的操縱函數(shù)如表16.6所示。表16.5iostream.h中的操縱符操縱符用法舉例結(jié)果說明deccout<<dec<<intvar;將整數(shù)轉(zhuǎn)化為十進制格式輸出cin>>dec>>intvar;將整數(shù)轉(zhuǎn)化為十進制格式輸入hexcout<<hex<<intvar;將整數(shù)轉(zhuǎn)化為十六進制格式輸出cin>>hex>>intvar;將整數(shù)轉(zhuǎn)化為十六進制格式輸入octcout<<oct<<intvar;將整數(shù)轉(zhuǎn)化為八進制格式輸出cin>>oct>>intvar;將整數(shù)轉(zhuǎn)化為八進制格式輸入wscin>>ws忽略輸入流中的空格endlcout<<endl;插入換行符,刷新流ebdscout<<ends;插入串最后的串結(jié)束符flushcout<<flush;刷新一個輸入流表16.6iomanip.h中的操縱函數(shù)操縱符用法舉例結(jié)果說明setprecision(int)cout<<setprecision(6)輸出精度為6位小數(shù)的浮點數(shù)cin>>setprecision(15)輸入精度為15位小數(shù)的浮點數(shù)setw(int)cout<<setw(6)<<var;輸出寬度為6的數(shù)據(jù)cin>>setw(24)>>buf;輸入寬度為24的數(shù)據(jù)setiosflags(long)cout<<setioflags(ios::hex|ios::uppercase)指定數(shù)據(jù)輸出的格式為十六進制格式且用大寫字母輸出cin>>setioflags(ios::oct|ios::skipws)指定數(shù)據(jù)輸入的格式為八進制格式且跳過輸入中的空白reseriosflags(long)cout<<reseriosflags(ios::dec)取消數(shù)據(jù)輸出的十進制格式cout<<reseriosflags(ios::dec)取消數(shù)據(jù)輸入的十六進制格式setfill(char)cout<<setfill(‘*’)<<endl;設(shè)置填充字符*【范例16-9】將通過實例講述使用格式控制符控制輸出格式的方法用流對象的成員函數(shù)控制輸出格式

除了可以用控制符來控制輸出格式外,還可以通過調(diào)用流對象cout中用于控制輸出格式的成員函數(shù)來控制輸出格式。在類ios的說明中,列出了如下所示的控制輸出格式的常用的成員函數(shù)。longflags(); //返回當前標志字longflags(long); //設(shè)置標志字并返回longsetf(long); //設(shè)置指定的標志位longunsetf(long); //清除指定的標志位longsetf(long,long); //設(shè)置指定的標志位的值intwidth(); //返回當前顯示數(shù)據(jù)的域?qū)抜ntwidth(int); //設(shè)置當前顯示域?qū)挷⒎祷卦驅(qū)抍harfill(); //返回當前填充字符charfill(char); //設(shè)置填充字符并返回原填充字符intprecision(); //返回當前浮點數(shù)精度//設(shè)置浮點數(shù)精度并返回原精度(指小數(shù)點后的位數(shù))intprecision(int);

格式標志在類ios中被定義為枚舉值,因此在引用這些格式標志時要在前面加上類名ios和域運算符“::”。所涉及的標志字又稱標志狀態(tài)字,它是一個long類型(長整型)的變量。狀態(tài)字的各位都控制一定的I/O特征,例如,標識狀態(tài)字的右第一位為1,則表示在輸入時跳過空白符號。狀態(tài)字枚舉類型形式定義于ios說明中,如下所示:Enum{skipws=0x0001, //輸入時跳過空白left=0x0002, //左對齊輸出right=0x0004, //右對齊輸出internal=0x0008, //在符號位和基指示符后填充dec=0x0010, //十進制格式oct=0x0020, //八進制格式hex=0x0040, //十六進制格式showbase=0x0080, //輸出標明基數(shù)說明showpoint=0x0100, //輸出浮點數(shù)帶小數(shù)點uppercase=0x0200, //十六進制大寫輸出showpos=0x0400, //輸出正整數(shù)帶+號scientific=0x0800, //輸出浮點數(shù)用科學表示法fixed=0x1000, //輸出浮點數(shù)以定點形式unitbuf=0x2000, //插入后刷新流緩沖區(qū)stdio=0x4000 //插入后刷新stdout和stderr};【范例16-10】將通過實例講述用流對象的成員函數(shù)控制輸出格式的方法用流成員函數(shù)put輸出字符

在C++程序中,一般用cout和插入運算符“<<”實現(xiàn)輸出,cout流在內(nèi)存中有相應(yīng)的緩沖區(qū)。有時用戶還有特殊的輸出要求,例如只輸出一個字符。ostream類除了提供前面介紹過的用于格式控制的成員函數(shù)外,還提供了專用于輸出單個字符的成員函數(shù)put。它的用法很簡單,例如:cout.put('a');代碼說明:調(diào)用該函數(shù)的結(jié)果是在屏幕上顯示一個字符a。put函數(shù)的參數(shù)可以是字符或字符的ASCII代碼(也可以是一個整型表達式),例如:cout.put(65+32);代碼說明:程序也顯示字符a,因為97是字符a的ASCII代碼。還可以在一個語句中連續(xù)調(diào)用put函數(shù),例如:cout.put(71).put(79).put(79).put(68).put('\n'); //屏幕上顯示GOOD【范例16-11】將通過實例講述用流成員函數(shù)put輸出字符的方法用于字符輸入的流成員函數(shù)

——用get函數(shù)讀入一個字符

(1)不帶參數(shù)的get函數(shù)不帶參數(shù)的get函數(shù)的調(diào)用形式如下所示:cin.get();代碼說明:它用來從指定的輸人流中提取一個字符(包括空白字符),函數(shù)的返回值就是讀入的字符。若遇到輸入流中的文件結(jié)束符,則函數(shù)值返回文件結(jié)束標志EOF,一般以-1代表EOF,用-1而不用0或正值,是考慮到不與字符的ASCII代碼混淆,但不同的C++系統(tǒng)所用的EOF值有可能不同?!痉独?6-12】將通過實例講述如何使用不帶參數(shù)的get函數(shù)提取字符用于字符輸入的流成員函數(shù)

——用get函數(shù)讀入一個字符

(2)有1個參數(shù)的get函數(shù)有1個參數(shù)的get函數(shù)的調(diào)用形式如下所示:cin.get(ch);代碼說明:其作用是從輸人流中讀取一個字符,賦給字符變量ch。如果讀取成功則函數(shù)返回非零值,如失?。ㄓ鑫募Y(jié)束符)則函數(shù)返回零值假。【范例16-13】將通過改寫實例16.11講述如何使用有1個參數(shù)的get函數(shù)提取字符用于字符輸入的流成員函數(shù)

——用get函數(shù)讀入一個字符

(3)有3個參數(shù)的get函數(shù)有3個參數(shù)的get函數(shù)的調(diào)用形式有如下兩種方式:cin.get(字符數(shù)組,字符個數(shù)n,終止字符); //方法1cin.get(字符指針,字符個數(shù)n,終止字符); //方法2代碼說明:其作用是從輸入流中讀取n-1個字符,賦給指定的字符數(shù)組(或字符指針指向的數(shù)組),如果在讀取n-1個字符之前遇到指定的終止字符,則提前結(jié)束讀取。如果讀取成功則函數(shù)返回非零值,如失?。ㄓ鑫募Y(jié)束符)則函數(shù)返回零值?!痉独?6-14】將通過改寫實例16.11講述如何使用有3個參數(shù)的get函數(shù)提取字符用于字符輸入的流成員函數(shù)

——用getline函數(shù)讀入一行字符

getline函數(shù)的作用是從輸人流中讀取一行字符,其用法與帶3個參數(shù)的get函數(shù)類似,它的一般調(diào)用形式如下所示:cin.getline(字符數(shù)組(或字符指針),字符個數(shù)n,終止標志字符);【范例16-15】將通過實例講述如何用getline函數(shù)讀入一行字符istrearn類的其它成員函數(shù)

1.eof函數(shù)eof是endoffile的縮寫,表示“文件結(jié)束”。從輸人流讀取數(shù)據(jù),如果到達文件末尾(遇文件結(jié)束符),eof函數(shù)值為非零值,否則為零值?!痉独?6-16】將通

溫馨提示

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

評論

0/150

提交評論