一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C++流的概念

 收藏小管 2017-05-11

在C++語言中,數(shù)據(jù)的輸入和輸出(簡(jiǎn)寫為I/O)包括對(duì)標(biāo)準(zhǔn)輸入設(shè)備鍵盤和標(biāo)準(zhǔn)輸出設(shè)備顯示器、對(duì)在外存磁盤上的文件和對(duì)內(nèi)存中指定的字符串存儲(chǔ)空間(當(dāng)然可用該空間存儲(chǔ)任何信息)進(jìn)行輸入輸出這三個(gè)方面。對(duì)標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備的輸入輸出簡(jiǎn)稱為標(biāo)準(zhǔn)I/O,對(duì)在外存磁盤上文件的輸入輸出簡(jiǎn)稱為文件I/O,對(duì)內(nèi)存中指定的字符串存儲(chǔ)空間的輸入輸出簡(jiǎn)稱為串I/O。
C++語言系統(tǒng)為實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出定義了一個(gè)龐大的類庫(kù),它包括的類主要有iOS,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream等,其中ios為根基類,其余都是它的直接或間接派生類。

ios為根基類,它直接派生四個(gè)類:輸入流類istream、輸出流類ostream、文件流基類fstreambase和字符串流基類strstreambase,輸入文件流類同時(shí)繼承了輸入流類和文件流基類(當(dāng)然對(duì)于根基類是間接繼承),輸出文件流類ofstream同時(shí)繼承了輸出流類和文件流基類,輸入字符串流類istrstream同時(shí)繼承了輸入流類和字符串流基類,輸出字符串流類ostrstream同時(shí)繼承了輸出流類和字符串流基類,輸入輸出流類iostream同時(shí)繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時(shí)繼承了輸入輸出流類和文件流基類,輸入輸出字符串流類strstream同時(shí)繼承了輸入輸出流類和字符串流基類。
"流"就是"流動(dòng)",是物質(zhì)從一處向另一處流動(dòng)的過程。C++流是指信息從外部輸入設(shè)備(如鍵盤和磁盤)向計(jì)算機(jī)內(nèi)部(即內(nèi)存)輸入和從內(nèi)存向外部輸出設(shè)備(如顯示器和磁盤)輸出的過程,這種輸入輸出過程被形象地比喻為"流"。為了實(shí)現(xiàn)信息的內(nèi)外流動(dòng),C++系統(tǒng)定義了I/O類庫(kù),其中的每一個(gè)類都稱作相應(yīng)的流或流類,用以完成某一方面的功能。根據(jù)一個(gè)流類定義的對(duì)象也時(shí)常被稱為流。如根據(jù)文件流類fstream定義的一個(gè)對(duì)象fio,可稱作為fio流或fio文件流,用它可以同磁盤上一個(gè)文件相聯(lián)系,實(shí)現(xiàn)對(duì)該文件的輸入和輸出,fio就等同于與之相聯(lián)系的文件。
C++系統(tǒng)中的I/O類庫(kù),其所有類被包含在iostream.h,fstream.h和strstrea.h這三個(gè)系統(tǒng)頭文件中,各頭文件包含的類如下:
iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign,
istream_withassign, ostream_withassign等。
fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h
中的所有類。
Strstrea.h包含有:strstream, istrstream, ostrstream和strstreambase,以及
iostream.h中的所有類。
在一個(gè)程序或一個(gè)編譯單元(即一個(gè)程序文件)中當(dāng)需要進(jìn)行標(biāo)準(zhǔn)I/O操作時(shí),則必須包含頭文件iostream.h,當(dāng)需要進(jìn)行文件I/O操作時(shí),則必須包含頭文件fstream.h,同樣,當(dāng)需要進(jìn)行串I/O操作時(shí),則必須包含頭文件strstrea.h。在一個(gè)程序或編譯單元中包含一個(gè)頭文件的命令格式為"#include<頭文件名>",當(dāng)然若頭文件是用戶建立的,則頭文件名的兩側(cè)不是使用尖括號(hào),而是使用雙引號(hào)。當(dāng)系統(tǒng)編譯一個(gè)C++文件對(duì)#include命令進(jìn)行處理時(shí),是把該命令中指定的文件中的全部?jī)?nèi)容嵌入到該命令的位置,然后再編譯整個(gè)C++文件生成相應(yīng)的目標(biāo)代碼文件。
C++不僅定義有現(xiàn)成的I/O類庫(kù)供用戶使用,而且還為用戶進(jìn)行標(biāo)準(zhǔn)I/O操作定義了四個(gè)類對(duì)象,它們分別是cin,cout,cerr和clog,其中cin為istream_withassign流類的對(duì)象,代表標(biāo)準(zhǔn)輸入設(shè)備鍵盤,也稱為cin流或標(biāo)準(zhǔn)輸入流,后三個(gè)為ostream_withassign流類的對(duì)象,cout代表標(biāo)準(zhǔn)輸出設(shè)備顯示器,也稱為cout流或標(biāo)準(zhǔn)輸出流,cerr和clog含義相同,均代表錯(cuò)誤信息輸出設(shè)備顯示器。因此當(dāng)進(jìn)行鍵盤輸入時(shí)使用cin流,當(dāng)進(jìn)行顯示器輸出時(shí)使用cout流,當(dāng)進(jìn)行錯(cuò)誤信息輸出時(shí)使用cerr或clog。
在istream輸入流類中定義有對(duì)右移操作符>>重載的一組公用成員函數(shù),函數(shù)的具體聲明格式為:
istream& operator>>(簡(jiǎn)單類型標(biāo)識(shí)符&);
簡(jiǎn)單類型標(biāo)識(shí)符可以為char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的任何一種,對(duì)于每一種類型都對(duì)應(yīng)著一個(gè)右移操作符重載函數(shù)。由于右移操作符重載用于給變量輸入數(shù)據(jù)的操作,所以又稱為提取操作符,即從流中提取出數(shù)據(jù)賦給變量。
當(dāng)系統(tǒng)執(zhí)行cin>>x操作時(shí),將根據(jù)實(shí)參x的類型調(diào)用相應(yīng)的提取操作符重載函數(shù),把x引用傳送給對(duì)應(yīng)的形參,接著從鍵盤的輸入中讀入一個(gè)值并賦給x(因形參是x的別名)后,返回cin流,以便繼續(xù)使用提取操作符為下一個(gè)變量輸入數(shù)據(jù)。
當(dāng)從鍵盤上輸入數(shù)據(jù)時(shí),只有當(dāng)輸入完數(shù)據(jù)并按下回車鍵后,系統(tǒng)才把該行數(shù)據(jù)存入到鍵盤緩沖區(qū),供cin流順序讀取給變量。還有,從鍵盤上輸入的每個(gè)數(shù)據(jù)之間必須用空格或回車符分開,因?yàn)閏in為一個(gè)變量讀入數(shù)據(jù)時(shí)是以空格或回車符作為其結(jié)束標(biāo)志的。
當(dāng)cin>>x操作中的x為字符指針類型時(shí),則要求從鍵盤的輸入中讀取一個(gè)字符串,并把它賦值給x所指向的存儲(chǔ)空間中,若x沒有事先指向一個(gè)允許寫入信息的存儲(chǔ)空間,則無法完成輸入操作。另外從鍵盤上輸入的字符串,其兩邊不能帶有雙引號(hào)定界符,若帶有只作為雙引號(hào)字符看待。對(duì)于輸入的字符也是如此,不能帶有單引號(hào)定界符。
在ostream輸出流類中定義有對(duì)左移操作符<<重載的一組公用成員函數(shù),函數(shù)的具體聲明格式為:
ostream& operator<<(簡(jiǎn)單類型標(biāo)識(shí)符);
簡(jiǎn)單類型標(biāo)識(shí)符除了與在istream流類中聲明右移操作符重載函數(shù)給出的所有簡(jiǎn)單類型標(biāo)識(shí)符相同以外,還增加一個(gè)void* 類型,用于輸出任何指針(但不能是字符指針,因?yàn)樗鼘⒈蛔鳛樽址幚恚摧敵鏊赶虼鎯?chǔ)空間中保存的一個(gè)字符串)的值。由于左移操作符重載用于向流中輸出表達(dá)式的值,所以又稱為插入操作符。如當(dāng)輸出流是cout時(shí),則就把表達(dá)式的值插入到顯示器上,即輸出到顯示器顯示出來。
當(dāng)系統(tǒng)執(zhí)行cout<<x操作時(shí),首先根據(jù)x值的類型調(diào)用相應(yīng)的插入操作符重載函數(shù),把x的值按值傳送給對(duì)應(yīng)的形參,接著執(zhí)行函數(shù)體,把x的值(亦即形參的值)輸出到顯示器屏幕上,從當(dāng)前屏幕光標(biāo)位置起顯示出來,然后返回cout流,以便繼續(xù)使用插入操作符輸出下一個(gè)表達(dá)式的值。當(dāng)使用插入操作符向一個(gè)流輸出一個(gè)值后,再輸出下一個(gè)值時(shí)將被緊接著放在上一個(gè)值的后面,所以為了讓流中前后兩個(gè)值分開,可以在輸出一個(gè)值之后接著輸出一個(gè)空格,或一個(gè)換行符,或其他所需要的字符或字符串。

輸入輸出格式控制

另外提供一個(gè)新的編寫c/c++程序的方法,因?yàn)樵趘s下面編寫一個(gè)簡(jiǎn)單的小程序,就得生成一大串中間文件,令人十分的不爽

(1),下載utraledit-32編輯器,推薦v11.
(2),在utraledit-32中,分別點(diǎn)擊菜單:高級(jí)-工具配置,出現(xiàn)一個(gè)dialog,用來設(shè)置用戶自定義的菜單項(xiàng)。我們的想法是,設(shè)置一個(gè)編譯菜單和運(yùn)行菜單項(xiàng),分別用來編譯在utraledit-32編寫的c/c++源文件。這樣,在utraledit-32中編寫好程序后,點(diǎn)擊這兩個(gè)菜單,就可以編譯程序,和運(yùn)行程序。運(yùn)行的結(jié)果在utraledit-32的輸出框中顯示。具體的設(shè)置如下。
    編譯:
    1,在命令行中填入:cl %n%e   我們知道,dos下的cl命令用來編譯源文件。后面的兩個(gè)參數(shù)%n%e表示要編    譯的源文件的文件名。(注意每個(gè)字母必須是小寫的,以下同)
    2,在工作目錄中填入:%p
    3,在菜單項(xiàng)目名中填寫 編譯,這個(gè)名字就是我們要設(shè)置的編譯菜單項(xiàng)的名字。
    4,對(duì)于下面的幾個(gè)復(fù)選框,選中輸出到列表框和捕獲輸出。
    5,點(diǎn)擊 插入 按鈕,建立編譯菜單項(xiàng)
    運(yùn)行:
    1,在命令行中填入:%n
    2,在工作目錄中填入:%p
    3,在菜單項(xiàng)目名中填寫 運(yùn)行,這個(gè)名字就是我們要設(shè)置的運(yùn)行菜單項(xiàng)的名字。
    4,對(duì)于下面的幾個(gè)復(fù)選框,選中輸出到列表框和捕獲輸出。
    5,點(diǎn)擊 插入 按鈕,建立運(yùn)行菜單項(xiàng)
點(diǎn)擊確定退出
這樣,在 高級(jí)(A) 菜單下面可以看到出現(xiàn)了兩個(gè)新的菜單:編譯和運(yùn)行
這樣,當(dāng)寫好源程序后,點(diǎn)擊工具編譯和運(yùn)行菜單,就可以編譯和運(yùn)行程序。最終生成.obj文件和.exe文件。這樣的做法,比起使用vc要生成一大堆文件,而且要為每一個(gè)程序建立一個(gè)文件夾,是不是更加的方便呢?
(3),為編譯和運(yùn)行菜單設(shè)置快捷健:
    utraledit-32是一個(gè)強(qiáng)大的編輯器,可以使用戶自己定義各個(gè)菜單的快捷健。具體的做法如下:
    點(diǎn)擊菜單:高級(jí)-配置,再選中鍵映射這一欄,可以看到所有的菜單項(xiàng)對(duì)應(yīng)的快捷健,當(dāng)然也包括我們剛才生成的兩個(gè)菜單,如果覺得這兩個(gè)菜單的快捷鍵用得不爽的話,可以自己設(shè)定。更詳細(xì)的做法就不說啦。
(4)原理:說了這么多,其實(shí)上面用到的是cl命令和utraledit-32提供的一些接口。我們知道,在dos下,可以用cl命令來編譯c/c++程序(當(dāng)然估計(jì)沒人有會(huì)真的這么做)。而utraledit-32提供了一個(gè)接口,可以建立菜單項(xiàng),通過點(diǎn)擊菜單項(xiàng)來執(zhí)行dos下的命令。需要考慮的是,dos下的cl命令要求提供源文件的文件名作為參數(shù),這個(gè)參數(shù),在utraledit-32用%n%e來代替。當(dāng)然,也可以為%N%E,但推薦使用小寫,大小寫的區(qū)別請(qǐng)看utraledit-32的幫助文檔。
8-7:補(bǔ)充:如果要編譯鏈接生成DLL文件,把編譯命令改為:   cl %n%e  /LD ,需要說明的是,生成exe文件的命令和生成dll文件的命令不能相互換用,所以,如果在utraledit下經(jīng)常性地開發(fā)dll程序的話,還得再創(chuàng)建個(gè)編譯dll文件得菜單為好,這樣就避免了編譯兩種文件的時(shí)候改來改去。


 

 


1.ios類中的枚舉常量
在根基類ios中定義有三個(gè)用戶需要使用的枚舉類型,由于它們是在公用成員部分定義的,所以其中的每個(gè)枚舉類型常量在加上ios::前綴后都可以為本類成員函數(shù)和所有外部函數(shù)訪問。在三個(gè)枚舉類型中有一個(gè)無名枚舉類型,其中定義的每個(gè)枚舉常量都是用于設(shè)置控制輸入輸出格式的標(biāo)志使用的。該枚舉類型定義如下:
enum {skipws, left, right, internal, dec, oct, hex, showbase, 
showpoint, uppercase, showpos, scientific, fixed, unitbuf, stdio
};
各枚舉常量的含義如下:
skipws 
利用它設(shè)置對(duì)應(yīng)標(biāo)志后,從流中輸入數(shù)據(jù)時(shí)跳過當(dāng)前位置及后面的所有連續(xù)的空白字符,從第一個(gè)非空白字符起讀數(shù),否則不跳過空白字符??崭?、制表符'/t'、回車符'/r'和換行符'/n'統(tǒng)稱為空白符。缺省為設(shè)置。
left, right, internal
left在指定的域?qū)拑?nèi)按左對(duì)齊輸出,right按右對(duì)齊輸出,而internal使數(shù)值的符號(hào)按左對(duì)齊、數(shù)值本身按右對(duì)齊輸出。域?qū)拑?nèi)剩余的字符位置用填充符填充。缺省為right設(shè)置。在任一時(shí)刻只有一種有效。
dec, oct, hex 
設(shè)置dec對(duì)應(yīng)標(biāo)志后,使以后的數(shù)值按十進(jìn)制輸出,設(shè)置oct后按八進(jìn)制輸出,而設(shè)置hex后則按十六進(jìn)制輸出。缺省為dec設(shè)置。
showbase 
設(shè)置對(duì)應(yīng)標(biāo)志后使數(shù)值輸出的前面加上"基指示符",八進(jìn)制數(shù)的基指示符為數(shù)字0,十六進(jìn)制數(shù)的基指示符為0x,十進(jìn)制數(shù)沒有基指示符。缺省為不設(shè)置,即在數(shù)值輸出的前面不加基指示符。
showpoint 
強(qiáng)制輸出的浮點(diǎn)數(shù)中帶有小數(shù)點(diǎn)和小數(shù)尾部的無效數(shù)字0。缺省為不設(shè)置。
uppercase 
使輸出的十六進(jìn)制數(shù)和浮點(diǎn)數(shù)中使用的字母為大寫。缺省為不設(shè)置。即輸出的十六進(jìn)制數(shù)和浮點(diǎn)數(shù)中使用的字母為小寫。
showpos 
使輸出的正數(shù)前帶有正號(hào)"+"。缺省為不設(shè)置。即輸出的正數(shù)前不帶任何符號(hào)。
scientific, fixed 
進(jìn)行scientific設(shè)置后使浮點(diǎn)數(shù)按科學(xué)表示法輸出,進(jìn)行fixed設(shè)置后使浮點(diǎn)數(shù)按定點(diǎn)表示法輸出。只能任設(shè)其一。缺省時(shí)由系統(tǒng)根據(jù)輸出的數(shù)值選用合適的表示輸出。
unitbuf, stdio 
這兩個(gè)常量很少使用,所以不予介紹。
在ios中定義的第二個(gè)枚舉類型為:
enum open_mode {in, out, ate, app, trunc, nocreate, noreplace, binany};
其中的每個(gè)枚舉常量規(guī)定一種文件打開的方式,在定義文件流對(duì)象和打開文件時(shí)使用。
在ios中定義的第三個(gè)枚舉類型為:
enum seek_dir {beg, cur, end};
其中的每個(gè)枚舉常量用于對(duì)文件指針的定位操作上。

2. ios類中的成員函數(shù)
ios類提供成員函數(shù)對(duì)流的狀態(tài)進(jìn)行檢測(cè)和進(jìn)行輸入輸出格式控制等操作,每個(gè)成員函數(shù)的聲明格式和簡(jiǎn)要說明如下: 
int bad(); //操作出錯(cuò)時(shí)返回非0值。
int eof(); //讀取到流中最后的文件結(jié)束符時(shí)返回非0值。
int fail(); //操作失敗時(shí)返回非0值。
void clear(); //清除bad,eof和fail所對(duì)應(yīng)的標(biāo)志狀態(tài),使之恢復(fù)為正常狀態(tài)
//值0,使good標(biāo)志狀態(tài)恢復(fù)為1。
char fill(); //返回當(dāng)前使用的填充字符。
char fill(char c); //重新設(shè)置流中用于輸出數(shù)據(jù)的填充字符為c的值,返回此
//前的填充字符。系統(tǒng)預(yù)設(shè)置填充字符為空格。
long flags(); //返回當(dāng)前用于I/O控制的格式狀態(tài)字。
long flags(long f); //重新設(shè)置格式狀態(tài)字為f的值,返回此前的格式狀態(tài)字。
int good(); //操作正常時(shí)返回非0值,當(dāng)操作出錯(cuò)、失敗和讀到文件結(jié)束符時(shí)
//均為不正常,則返回0。
int precision(); //返回浮點(diǎn)數(shù)輸出精度,即輸出的有效數(shù)字的位數(shù)。
int precision(int n); //設(shè)置浮點(diǎn)數(shù)的輸出精度為n,返回此前的輸出精度。
//系統(tǒng)預(yù)設(shè)置的輸出精度為6,即輸出的浮點(diǎn)數(shù)最多
//具有6位為有效數(shù)字。
int rdstate(); //操作正常時(shí)返回0,否則返回非0值,它與good()正好相反。
long setf(long f); //根據(jù)參數(shù)f設(shè)置相應(yīng)的格式化標(biāo)志,返回此前的設(shè)置。
//該參數(shù)f所對(duì)應(yīng)的實(shí)參為無名枚舉類型中的枚舉常量(
//又稱格式化常量),可以同時(shí)使用一個(gè)或多個(gè)常量,每?jī)蓚€(gè)
//常量之間要用按位或操作符連接。如當(dāng)需要左對(duì)齊輸出,
//并使數(shù)值中的字母大寫時(shí),則調(diào)用該函數(shù)的實(shí)參為ios::
//left | ios::uppercase。
long unsetf(long f); //根據(jù)參數(shù)f清除相應(yīng)的格式化標(biāo)志,返回此前的設(shè)置。
//如要清除此前的左對(duì)齊輸出設(shè)置,恢復(fù)缺省的右對(duì)齊輸出
//設(shè)置,則調(diào)用該函數(shù)的實(shí)參為ios::left。
int width(); //返回當(dāng)前的輸出域?qū)?。若返回?cái)?shù)值0則表明沒有為剛才輸出的
//數(shù)值設(shè)置輸出域?qū)挘敵鲇驅(qū)捠侵篙敵龅闹翟诹髦兴加械淖止?jié)數(shù)。
int width(int w); //設(shè)置下一個(gè)數(shù)據(jù)值的輸出域?qū)挒閣,返回為輸出上一個(gè)數(shù)
//據(jù)值所規(guī)定的域?qū)?,若無規(guī)定則返回0。注意:此設(shè)置不
//是一直有效,而只是對(duì)下一個(gè)輸出數(shù)據(jù)有效。
因?yàn)樗蠭/O流類都是ios的派生類,所以它們的對(duì)象都可以調(diào)用ios類中的成員函數(shù)和使用ios類中的格式化常量進(jìn)行輸入輸出格式控制。下面以標(biāo)準(zhǔn)輸出流對(duì)象cout為例說明輸出的格式化控制。
程序1:
#include<iostream.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進(jìn)制輸出
cout.setf(ios::oct); //設(shè)置為八進(jìn)制輸出
cout<<x<<' '<<y<<' '<<z<<endl; //按八進(jìn)制輸出
cout.unsetf(ios::oct); 
//取消八進(jìn)制輸出設(shè)置,恢復(fù)按十進(jìn)制輸出
cout.setf(ios::hex); //設(shè)置為十六進(jìn)制輸出
cout<<x<<' '<<y<<' '<<z<<endl; //按十六進(jìn)制輸出
cout.setf(ios::showbase | ios::uppercase);
//設(shè)置基指示符輸出和數(shù)值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::showbase | ios::uppercase);
//取消基指示符輸出和數(shù)值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::hex); 
//取消十六進(jìn)制輸出設(shè)置,恢復(fù)按十進(jìn)制輸出
cout<<x<<' '<<y<<' '<<z<<endl;
}
此程序的運(yùn)行結(jié)果如下:
30 300 1024
36 454 2000
1e 12c 400
0X1E 0X12C 0X400
1e 12c 400
30 300 1024

程序2:
#include<iostream.h>
void main()
{
int x=468;
double y=-3.425648;
cout<<"x=";
cout.width(10); //設(shè)置輸出下一個(gè)數(shù)據(jù)的域?qū)挒?0
cout<<x; //按缺省的右對(duì)齊輸出,剩余位置填充空格字符
cout<<"y=";
cout.width(10); //設(shè)置輸出下一個(gè)數(shù)據(jù)的域?qū)挒?0
cout<<y<<endl; 
cout.setf(ios::left); //設(shè)置按左對(duì)齊輸出
cout<<"x=";
cout.width(10);
cout<<x;
cout<<"y=";
cout.width(10);
cout<<y<<endl;
cout.fill('*'); //設(shè)置填充字符為'*'
cout.precision(3); //設(shè)置浮點(diǎn)數(shù)輸出精度為3
cout.setf(ios::showpos); //設(shè)置正數(shù)的正號(hào)輸出
cout<<"x=";
cout.width(10);
cout<<x;
cout<<"y=";
cout.width(10);
cout<<y<<endl;
}
此程序運(yùn)行結(jié)果如下:
x= 468y= -3.42565
x=468 y=-3.42565
x=+468******y=-3.43*****

程序3:
#include<iostream.h>
void main()
{
float x=25, y=-4.762;
cout<<x<<' '<<y<<endl;
cout.setf(ios::showpoint); //強(qiáng)制顯示小數(shù)點(diǎn)和無效0
cout<<x<<' '<<y<<endl;
cout.unsetf(ios::showpoint); //恢復(fù)缺省輸出
cout.setf(ios::scientific); //設(shè)置按科學(xué)表示法輸出
cout<<x<<' '<<y<<endl;
cout.setf(ios::fixed); //設(shè)置按定點(diǎn)表示法輸出
cout<<x<<' '<<y<<endl;
}
程序運(yùn)行結(jié)果如下:
25 -4.762
25.0000 -4.76200
2.500000e+001 -4.762000e+000
25 -4.762

3. 格式控制操作符
數(shù)據(jù)輸入輸出的格式控制還有更簡(jiǎn)便的形式,就是使用系統(tǒng)頭文件iomanip.h中提供的操縱符。使用這些操縱符不需要調(diào)用成員函數(shù),只要把它們作為插入操作符<<(個(gè)別作為提取操作符>>)的輸出對(duì)象即可。這些操縱符及功能如下:
dec //轉(zhuǎn)換為按十進(jìn)制輸出整數(shù),它也是系統(tǒng)預(yù)置的進(jìn)制。
oct //轉(zhuǎn)換為按八進(jìn)制輸出整數(shù)。
hex //轉(zhuǎn)換為按十六進(jìn)制輸出整數(shù)。
ws //從輸入流中讀取空白字符。
endl //輸出換行符'/n'并刷新流。刷新流是指把流緩沖區(qū)的內(nèi)容立即寫入到對(duì)
//應(yīng)的物理設(shè)備上。
ends //輸出一個(gè)空字符'/0'。
flush //只刷新一個(gè)輸出流。
setiosflags(long f) //設(shè)置f所對(duì)應(yīng)的格式化標(biāo)志,功能與setf(long f)
//成員函數(shù)相同,當(dāng)然輸出該操縱符后返回的是一個(gè)
//輸出流。如采用標(biāo)準(zhǔn)輸出流cout輸出它時(shí),則返回
//cout。對(duì)于輸出每個(gè)操縱符后也都是如此,即返回
//輸出它的流,以便向流中繼續(xù)插入下一個(gè)數(shù)據(jù)。
resetiosflags(long f) //清除f所對(duì)應(yīng)的格式化標(biāo)志,功能與unsetf(long f)
//成員函數(shù)相同。當(dāng)然輸出后返回一個(gè)流。
setfill(int c) //設(shè)置填充字符為ASCII碼為c的字符。
setprecision(int n) //設(shè)置浮點(diǎn)數(shù)的輸出精度為n。
setw(int w) //設(shè)置下一個(gè)數(shù)據(jù)的輸出域?qū)挒閣。
在上面的操縱符中,dec, oce, hex, endl, ends, flush和ws除了在iomanip.h中有定義外,在iostream.h中也有定義。所以當(dāng)程序或編譯單元中只需要使用這些不帶參數(shù)的操縱符時(shí),可以只包含iostream.h文件,而不需要包含iomanip.h文件。
下面以標(biāo)準(zhǔn)輸出流對(duì)象cout為例,說明使用操作符進(jìn)行的輸出格式化控制。
程序4:
#include<iostream.h> 
//因iomanip.h中包含有iostream.h,所以該命令可省略
#include<iomanip.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進(jìn)制輸出
cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八進(jìn)制輸出
cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六進(jìn)制輸出
cout<<setiosflags(ios::showbase | ios::uppercase);
//設(shè)置基指示符和數(shù)值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進(jìn)制輸出
cout<<resetiosflags(ios::showbase | ios::uppercase);
//取消基指示符和數(shù)值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進(jìn)制輸出
cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十進(jìn)制輸出
}
此程序的功能和運(yùn)行結(jié)果都與程序1完全相同。

程序5:
#include<iostream.h>
#include<iomanip.h>
void main()
{
int x=468;
double y=-3.425648;
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<setiosflags(ios::left); //設(shè)置按左對(duì)齊輸出
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<setfill('*'); //設(shè)置填充字符為'*'
cout<<setprecision(3); //設(shè)置浮點(diǎn)數(shù)輸出精度為3
cout<<setiosflags(ios::showpos); //設(shè)置正數(shù)的正號(hào)輸出
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<resetiosflags(ios::left | ios::showpos);
cout<<setfill(' '); 
}
此程序的功能和運(yùn)行結(jié)果完全與程序2相同。

程序6:
#include<iomanip.h>
void main()
{
float x=25, y=-4.762;
cout<<x<<' '<<y<<endl;
cout<<setiosflags(ios::showpoint);
cout<<x<<' '<<y<<endl;
cout<<resetiosflags(ios::showpoint);
cout<<setiosflags(ios::scientific);
cout<<x<<' '<<y<<endl;
cout<<setiosflags(ios::fixed);
cout<<x<<' '<<y<<endl;
}
此程序的功能和運(yùn)行結(jié)果也完全與程序3相同。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产欧美一区二区另类精品| 中文字幕亚洲人妻在线视频| 中国少妇精品偷拍视频| 国产视频福利一区二区| 亚洲午夜福利视频在线| 日本不卡在线一区二区三区| 日本欧美视频在线观看免费 | 精品人妻一区二区三区在线看| 五月天丁香婷婷狠狠爱| 日韩精品中文在线观看| 91亚洲精品国产一区| 欧美日韩一区二区三区色拉拉| 果冻传媒在线观看免费高清| 亚洲欧美日韩国产成人| 国产日本欧美韩国在线| 国产精品一区二区视频| 黑人巨大精品欧美一区二区区| 真实国产乱子伦对白视频不卡| 国产日韩欧美专区一区| 五月天六月激情联盟网| 99久久精品久久免费| 亚洲少妇人妻一区二区| 日韩欧美91在线视频| 少妇被粗大进猛进出处故事| 午夜精品一区二区av| 一区二区三区亚洲天堂| 粗暴蹂躏中文一区二区三区| 亚洲精品国产主播一区| 成人精品网一区二区三区| 亚洲综合激情另类专区老铁性| 黄色片一区二区三区高清| 国产精品成人免费精品自在线观看| 欧美成人精品国产成人综合| 国产亚洲成av人在线观看| 亚洲欧美日韩熟女第一页| 亚洲免费视频中文字幕在线观看| 国产老熟女超碰一区二区三区| 欧美午夜视频免费观看| 国产精品成人一区二区三区夜夜夜 | 爽到高潮嗷嗷叫之在现观看| 在线观看那种视频你懂的|