教學(xué)第8章輸入輸出流對(duì)象課件_第1頁
教學(xué)第8章輸入輸出流對(duì)象課件_第2頁
教學(xué)第8章輸入輸出流對(duì)象課件_第3頁
教學(xué)第8章輸入輸出流對(duì)象課件_第4頁
教學(xué)第8章輸入輸出流對(duì)象課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《解析C++面向?qū)ο蟪绦蛟O(shè)計(jì)》第8章輸入/輸出流對(duì)象11/26/20221第8章輸入/輸出流對(duì)象《解析C++面向?qū)ο蟪绦蛟O(shè)計(jì)》第8章輸入/輸出流對(duì)象11內(nèi)容提要8.1螺旋矩陣的輸入/輸出問題8.2流8.3無格式輸入/輸出8.4輸入/輸出的格式控制(重點(diǎn))8.6自定義類型對(duì)象的輸入輸出8.7文件的輸入/輸出問題11/26/20222第8章輸入/輸出流對(duì)象內(nèi)容提要8.1螺旋矩陣的輸入/輸出問題11/22/提出問題編程輸出M*M的螺旋矩陣,要求數(shù)據(jù)間距與M相同。例如,4*4的螺旋矩陣,其間距為4:1234121314511161561098711/26/20223第8章輸入/輸出流對(duì)象提出問題編程輸出M*M的螺旋矩陣,要求數(shù)據(jù)間距與M相同。例如分析問題C++沒有定義任何用于執(zhí)行輸入或輸出的語句,但可以使用C語言中的標(biāo)準(zhǔn)I/O函數(shù)printf()和scanf()來解決此問題。11/26/20224第8章輸入/輸出流對(duì)象分析問題C++沒有定義任何用于執(zhí)行輸入或輸出的語句,但可以使【例8-2】有如下程序://example8_2.cpp#include<stdio.h>intb=20;floata=5.6;intmain(){printf("%d\n",a);scanf("%d",&a);scanf("%d",&b);printf("%d\n","abc");return0;}該程序的運(yùn)行結(jié)果為:161061273623↙45↙434998011/26/20225第8章輸入/輸出流對(duì)象【例8-2】有如下程序:該程序的運(yùn)行結(jié)果為:11/22/20printf()與scanf()存在以下兩個(gè)缺點(diǎn):1.非類型安全2.不可擴(kuò)充性11/26/20226第8章輸入/輸出流對(duì)象printf()與scanf()存在以下兩個(gè)缺點(diǎn):11/22C++使用類型安全(typesafe)的I/O流操作。不同類型的I/O流操作都是重載的,沒有定義過I/O功能的類型不具備I/O操作的能力。C++標(biāo)準(zhǔn)庫既可作為標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)據(jù)的I/O,也能用于自定義類型的對(duì)象的I/O,這種擴(kuò)展性是C++最有價(jià)值的特點(diǎn)之一。C++用輸入輸出流來解決這個(gè)問題。下面先介紹流的概念。11/26/20227第8章輸入/輸出流對(duì)象C++使用類型安全(typesafe)的I/O流操作。不同流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序中,也可以從程序中流向屏幕或磁盤文件。把數(shù)據(jù)的流動(dòng)抽象為流。C++的輸入輸出操作是由流來處理的。11/26/20228第8章輸入/輸出流對(duì)象流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序中,也可以從程序流的概念所謂流(stream)是指數(shù)據(jù)從一個(gè)位置流向另一個(gè)位置。流是字節(jié)的序列。11/26/20229第8章輸入/輸出流對(duì)象流的概念所謂流(stream)是指數(shù)據(jù)從一個(gè)位置流向另一個(gè)輸入/輸出是一種數(shù)據(jù)傳遞操作,可以看作字符序列在計(jì)算機(jī)內(nèi)存與外設(shè)之間的流動(dòng),C++將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽象為“流”。流動(dòng)的方向不同,構(gòu)成輸入/輸出流,即I/O流。11/26/202210第8章輸入/輸出流對(duì)象輸入/輸出是一種數(shù)據(jù)傳遞操作,可以看作字符序列在計(jì)算機(jī)內(nèi)存與I/O流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序,也可以從程序流向屏幕或磁盤文件。從流中獲取數(shù)據(jù)的操作稱為提取操作,向流中添加數(shù)據(jù)的操作稱為插入操作。數(shù)據(jù)的輸入/輸出就是通過I/O流來實(shí)現(xiàn)的。11/26/202211第8章輸入/輸出流對(duì)象I/O流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序,也可以從I/O流類庫的層次結(jié)構(gòu)C++編譯系統(tǒng)提供的I/O流類庫含有兩個(gè)平行基類:streambufiosios類有4個(gè)直接派生類:輸入流類istream輸出流類ostream文件流類fstreambase串流類strstreambase11/26/202212第8章輸入/輸出流對(duì)象I/O流類庫的層次結(jié)構(gòu)C++編譯系統(tǒng)提供的I/O流類庫含有標(biāo)準(zhǔn)輸入/輸出流對(duì)象標(biāo)準(zhǔn)I/O流預(yù)定義了4個(gè)流類對(duì)象:cin、cout、cerr、clog。操作系統(tǒng)給把外設(shè)用文件名的方式進(jìn)行管理,因此程序設(shè)計(jì)要訪問外設(shè)就跟訪問文件一樣方便。11/26/202213第8章輸入/輸出流對(duì)象標(biāo)準(zhǔn)輸入/輸出流對(duì)象標(biāo)準(zhǔn)I/O流預(yù)定義了4個(gè)流類對(duì)象:cinI/O分為無格式支持的低級(jí)I/O和具有格式支持的高級(jí)I/O。無格式支持的低級(jí)I/O以基本字節(jié)為操作對(duì)象,有格式支持的高級(jí)I/O把若干字節(jié)組合成有意義的單位,如整數(shù)、浮點(diǎn)數(shù)、字符、字符串及用戶自定義類型等等。11/26/202214第8章輸入/輸出流對(duì)象I/O分為無格式支持的低級(jí)I/O和具有格式支持的高級(jí)I/O。無格式輸入/輸出無格式輸入/輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)行的輸入/輸出。按默認(rèn)約定,每個(gè)C++程序都能使用標(biāo)準(zhǔn)I/O流,如標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出。cin用來處理標(biāo)準(zhǔn)輸入,即鍵盤輸入;cout用來處理標(biāo)準(zhǔn)輸出,即屏幕輸出。它們被定義在iostream.h頭文件中。在使用cout和cin前,要用編譯預(yù)處理命令將所使用的頭文件包含到源程序中,其格式如下:#include<iostream.h>11/26/202215第8章輸入/輸出流對(duì)象無格式輸入/輸出無格式輸入/輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)行無格式輸出“<<”是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)象cout上,實(shí)現(xiàn)默認(rèn)格式的屏幕輸出。使用cout輸出表達(dá)式值到屏幕上的格式如下:

cout<<E1<<E2<<…<<Em;

其中,E1、E2、…、Em為均為表達(dá)式。功能是計(jì)算各表達(dá)式的值,并將結(jié)果輸出到屏幕當(dāng)前光標(biāo)位置處。11/26/202216第8章輸入/輸出流對(duì)象無格式輸出“<<”是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)象co無格式輸出cout是ostream流類的對(duì)象,它在iostream頭文件中作為全局對(duì)象定義,其格式如下:ostreamcout(stdout);其中,stdout表示標(biāo)準(zhǔn)輸出設(shè)備名(屏幕)。在ostream流類中,對(duì)應(yīng)每個(gè)基本數(shù)據(jù)類型定義運(yùn)算符“<<”重載函數(shù)為友元,它們?cè)趏stream中聲明:ostream&operator<<(ostream&dest,char*pSource);ostream&operator<<(ostream&dest,intsource);ostream&operator<<(ostream&dest,charsource);11/26/202217第8章輸入/輸出流對(duì)象無格式輸出cout是ostream流類的對(duì)象,它在iost無格式輸入“>>”是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象cin上,實(shí)現(xiàn)默認(rèn)格式的鍵盤輸入。使用cin將數(shù)據(jù)輸入到變量的格式如下:

cin>>V1>>V2>>…>>Vn;

其中,V1、V2、…、Vn都是變量。功能是暫停執(zhí)行程序,等待用戶從鍵盤輸入數(shù)據(jù),各數(shù)據(jù)間用空格或Tab鍵分隔,輸入數(shù)據(jù)類型要與接受變量類型一致,輸完后,按回車鍵結(jié)束。11/26/202218第8章輸入/輸出流對(duì)象無格式輸入“>>”是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象ci無格式輸入cin是istream流類的對(duì)象,它在iostream頭文件中作為全局對(duì)象定義,其格式如下:istreamcin(stdin);在istream流類,對(duì)應(yīng)每個(gè)基本數(shù)據(jù)類型定義運(yùn)算符“>>”重載函數(shù)為友元,它們同樣也在ostream中聲明:istream&operator>>(istream&sour,char*pDes);istream&operator>>(istream&sour,intdes);istream&operator>>(istream&sour,chardes);11/26/202219第8章輸入/輸出流對(duì)象無格式輸入cin是istream流類的對(duì)象,它在iostr輸入輸出的格式控制C++提供了兩種格式化輸入/輸出方式:一種是用ios類成員函數(shù)進(jìn)行格式化輸入輸出另一種是用專門的操作符函數(shù)進(jìn)行格式化輸入輸出11/26/202220第8章輸入/輸出流對(duì)象輸入輸出的格式控制C++提供了兩種格式化輸入/輸出方式:1用ios類成員函數(shù)格式化ios類成員函數(shù)主要是通過對(duì)狀態(tài)標(biāo)志、輸出寬度、填充字符以及輸出精度的操作來完成輸入/輸出格式化。枚舉量定義在ios類中,因此引用時(shí)必須包含ios::前綴。使用時(shí)應(yīng)該全部用符號(hào)名,絕不要用數(shù)值。例8-3示例設(shè)置狀態(tài)標(biāo)志。11/26/202221第8章輸入/輸出流對(duì)象用ios類成員函數(shù)格式化ios類成員函數(shù)主要是通過對(duì)狀態(tài)用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作

ios類有3個(gè)成員函數(shù)可以對(duì)狀態(tài)標(biāo)志進(jìn)行操作,并且定義了一個(gè)long型數(shù)據(jù)成員記錄當(dāng)前狀態(tài)標(biāo)志。這些狀態(tài)標(biāo)志可用位或運(yùn)算符“|”進(jìn)行組合。用setf函數(shù)設(shè)置狀態(tài)標(biāo)志,其一般格式如下:

longios::setf(longflags)11/26/202222第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作ios類有3個(gè)成員函數(shù)可用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作清除狀態(tài)標(biāo)志用unsetf函數(shù)清除狀態(tài)標(biāo)志,其一般格式如下:

longios::unsetf(longflags)11/26/202223第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作清除狀態(tài)標(biāo)志11/22/2用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用函數(shù)flags取狀態(tài)標(biāo)志有兩種形式,其格式分別如下:

longios::flags()longios::flags(longflag)例8-4示例對(duì)狀態(tài)標(biāo)志的操作。11/26/202224第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用函數(shù)flags取狀態(tài)標(biāo)志用ios成員函數(shù)設(shè)置輸出寬度設(shè)置輸出寬度函數(shù)有兩種形式,其格式分別如下:

intios::width(intlen) intios::width()第一種形式是設(shè)置輸出寬度,并返回原來的輸出寬度;第二種形式是返回當(dāng)前輸出寬度,輸出寬度為0。11/26/202225第8章輸入/輸出流對(duì)象用ios成員函數(shù)設(shè)置輸出寬度設(shè)置輸出寬度函數(shù)有兩種形式,其格設(shè)置填充字符填充字符的作用是當(dāng)輸出值不滿輸出寬度時(shí)用填充字符來填充,默認(rèn)填充字符為空格。它與width()函數(shù)配合使用,否則沒有意義。設(shè)置填充字符函數(shù)有兩種形式,其格式分別如下:

charios::fill(charch)charios::fill()第一種形式是重新設(shè)置填充字符,并返回設(shè)置前的填充字符;第二種形式是返回當(dāng)前的填充字符。11/26/202226第8章輸入/輸出流對(duì)象設(shè)置填充字符填充字符的作用是當(dāng)輸出值不滿輸出寬度時(shí)用填充字符設(shè)置輸出精度設(shè)置浮點(diǎn)數(shù)輸出精度有兩種形式,其格式分別如下:

intios::precision(intp)intios::precision()第一種形式是重新設(shè)置輸出精度,并返回設(shè)置前的輸出精度;第二種形式是返回當(dāng)前的輸出精度。11/26/202227第8章輸入/輸出流對(duì)象設(shè)置輸出精度設(shè)置浮點(diǎn)數(shù)輸出精度有兩種形式,其格式分別如下:例8-6示例設(shè)置輸出寬度、填充字符、輸出精度。11/26/202228第8章輸入/輸出流對(duì)象11/22/202228第8章輸入/輸出流對(duì)象用操作符函數(shù)格式化為了不直接以標(biāo)志位的方式去處理流的狀態(tài),c++標(biāo)準(zhǔn)庫提供了標(biāo)準(zhǔn)的操作符函數(shù)專門操控這些狀態(tài)。這組函數(shù)不屬于任何類成員,定義在iomanip.h頭文件中。將它們用在提取運(yùn)算符“>>”或插入運(yùn)算符“<<”后面來設(shè)定輸入/輸出格式,即在讀寫對(duì)象之間插入一個(gè)修改狀態(tài)的操作。其中有些函數(shù)沒有參數(shù),所以又叫操作符。

11/26/202229第8章輸入/輸出流對(duì)象用操作符函數(shù)格式化為了不直接以標(biāo)志位的方式去處理流的狀態(tài),設(shè)置輸入/輸出寬度函數(shù)setw(int)設(shè)置輸出填充字符函數(shù)setfill(int)

設(shè)置輸出精度函數(shù)setprecision(int)設(shè)置輸入/輸出整型數(shù)數(shù)制函數(shù)dec、hex和oct取消輸入結(jié)束符函數(shù)ws

控制換行操作符endl

代表輸出單字符“\0”的操作符ends11/26/202230第8章輸入/輸出流對(duì)象設(shè)置輸入/輸出寬度函數(shù)setw(int)11/22/2022例8-7用操作符函數(shù)示例設(shè)置輸入/輸出寬度。11/26/202231第8章輸入/輸出流對(duì)象11/22/202231第8章輸入/輸出流對(duì)象解決問題P374-37711/26/202232第8章輸入/輸出流對(duì)象解決問題P374-37711/22/202232第8章輸入/提出問題如何對(duì)文本文件和二進(jìn)制文件進(jìn)行輸入輸出操作?11/26/202233第8章輸入/輸出流對(duì)象提出問題如何對(duì)文本文件和二進(jìn)制文件進(jìn)行輸入輸出操作?11/2文件的輸入/輸出C++把文件看作是一個(gè)字符(字節(jié))的序列,即由一個(gè)個(gè)字符(字節(jié))順序組成。根據(jù)數(shù)據(jù)的組織形式,可分為ASCII碼文件和二進(jìn)制文件。ASCII碼文件又稱為文本文件,它的每一個(gè)字節(jié)存放一個(gè)ASCII碼,代表一個(gè)字符。二進(jìn)制文件是把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣輸出到磁盤文件存放。11/26/202234第8章輸入/輸出流對(duì)象文件的輸入/輸出C++把文件看作是一個(gè)字符(字節(jié))的序列由于ASCII碼形式與字符一一對(duì)應(yīng),因此便于對(duì)字符進(jìn)行輸出或逐個(gè)處理,但它要占用較多的存儲(chǔ)空間,若存于二進(jìn)制文件中,可以節(jié)省存儲(chǔ)空間,但不能直接輸出字符形式。11/26/202235第8章輸入/輸出流對(duì)象由于ASCII碼形式與字符一一對(duì)應(yīng),因此便于對(duì)字符進(jìn)行輸出或C++有三種文件流類:輸入/輸出文件流類fstream輸入文件流類ifstream輸出文件流類ofstream它們分別從I/O流中的iostream、istream、ostream流類中派生而來。這些文件流類都定義在fstream.h頭文件中,因此,要使用文件流類,必須在程序開始包含該頭文件。11/26/202236第8章輸入/輸出流對(duì)象C++有三種文件流類:11/22/202236第8章輸入/輸C++中進(jìn)行文件操作的一般步驟

為文件定義一個(gè)流類對(duì)象;使用open()函數(shù)建立(或打開)文件。如果文件不存在,則建立該文件;如果磁盤上已存在該文件,則打開該文件;進(jìn)行讀寫操作。在建立(或打開)的文件上執(zhí)行所要求的輸入/輸出操作。一般來說,在內(nèi)存與外設(shè)的數(shù)據(jù)傳輸中,由內(nèi)存到外設(shè)稱為輸出或?qū)?,反之則稱為輸入或讀;使用close()函數(shù)關(guān)閉文件。當(dāng)完成操作后,應(yīng)把打開的文件關(guān)閉,避免誤操作。11/26/202237第8章輸入/輸出流對(duì)象C++中進(jìn)行文件操作的一般步驟為文件定義一個(gè)流類對(duì)象;11在C++中,打開一個(gè)文件就是將這個(gè)文件與一個(gè)流建立關(guān)聯(lián);關(guān)閉一個(gè)文件就是取消這種關(guān)聯(lián)。open()函數(shù)的原型在fstream.h中定義。另外,在fstream、ifstream和ofstream流類中均有定義。其原型為:

voidopen(char*filename,intmod,intaccess);其中第一個(gè)參數(shù)是用來傳遞文件名;第二個(gè)參數(shù)的值決定文件的使用方式;第三個(gè)參數(shù)的值決定文件的訪問方式。

11/26/202238第8章輸入/輸出流對(duì)象在C++中,打開一個(gè)文件就是將這個(gè)文件與一個(gè)流建立關(guān)聯(lián);關(guān)閉打開文件的一般格式如下:<流類對(duì)象名>.open(<文件名>,<使用方式>,<訪問方式>);關(guān)閉文件的一般格式如下:<流類對(duì)象>.close();11/26/202239第8章輸入/輸出流對(duì)象打開文件的一般格式如下:11/22/202239第8章輸入/例8-14示例文件的輸入/輸出操作。11/26/202240第8章輸入/輸出流對(duì)象11/22/202240第8章輸入/輸出流對(duì)象解決問題P381-38411/26/202241第8章輸入/輸出流對(duì)象解決問題P381-38411/22/202241第8章輸入/舉一反三11/26/202242第8章輸入/輸出流對(duì)象舉一反三11/22/202242第8章輸入/輸出流對(duì)象本章小結(jié)8.1螺旋矩陣的輸入/輸出問題8.2流8.3無格式輸入/輸出8.4輸入/輸出的格式控制(重點(diǎn))8.6自定義類型對(duì)象的輸入輸出8.7文件的輸入/輸出問題11/26/202243第8章輸入/輸出流對(duì)象本章小結(jié)8.1螺旋矩陣的輸入/輸出問題11/22/20《解析C++面向?qū)ο蟪绦蛟O(shè)計(jì)》第8章輸入/輸出流對(duì)象11/26/202244第8章輸入/輸出流對(duì)象《解析C++面向?qū)ο蟪绦蛟O(shè)計(jì)》第8章輸入/輸出流對(duì)象11內(nèi)容提要8.1螺旋矩陣的輸入/輸出問題8.2流8.3無格式輸入/輸出8.4輸入/輸出的格式控制(重點(diǎn))8.6自定義類型對(duì)象的輸入輸出8.7文件的輸入/輸出問題11/26/202245第8章輸入/輸出流對(duì)象內(nèi)容提要8.1螺旋矩陣的輸入/輸出問題11/22/提出問題編程輸出M*M的螺旋矩陣,要求數(shù)據(jù)間距與M相同。例如,4*4的螺旋矩陣,其間距為4:1234121314511161561098711/26/202246第8章輸入/輸出流對(duì)象提出問題編程輸出M*M的螺旋矩陣,要求數(shù)據(jù)間距與M相同。例如分析問題C++沒有定義任何用于執(zhí)行輸入或輸出的語句,但可以使用C語言中的標(biāo)準(zhǔn)I/O函數(shù)printf()和scanf()來解決此問題。11/26/202247第8章輸入/輸出流對(duì)象分析問題C++沒有定義任何用于執(zhí)行輸入或輸出的語句,但可以使【例8-2】有如下程序://example8_2.cpp#include<stdio.h>intb=20;floata=5.6;intmain(){printf("%d\n",a);scanf("%d",&a);scanf("%d",&b);printf("%d\n","abc");return0;}該程序的運(yùn)行結(jié)果為:161061273623↙45↙434998011/26/202248第8章輸入/輸出流對(duì)象【例8-2】有如下程序:該程序的運(yùn)行結(jié)果為:11/22/20printf()與scanf()存在以下兩個(gè)缺點(diǎn):1.非類型安全2.不可擴(kuò)充性11/26/202249第8章輸入/輸出流對(duì)象printf()與scanf()存在以下兩個(gè)缺點(diǎn):11/22C++使用類型安全(typesafe)的I/O流操作。不同類型的I/O流操作都是重載的,沒有定義過I/O功能的類型不具備I/O操作的能力。C++標(biāo)準(zhǔn)庫既可作為標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)據(jù)的I/O,也能用于自定義類型的對(duì)象的I/O,這種擴(kuò)展性是C++最有價(jià)值的特點(diǎn)之一。C++用輸入輸出流來解決這個(gè)問題。下面先介紹流的概念。11/26/202250第8章輸入/輸出流對(duì)象C++使用類型安全(typesafe)的I/O流操作。不同流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序中,也可以從程序中流向屏幕或磁盤文件。把數(shù)據(jù)的流動(dòng)抽象為流。C++的輸入輸出操作是由流來處理的。11/26/202251第8章輸入/輸出流對(duì)象流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序中,也可以從程序流的概念所謂流(stream)是指數(shù)據(jù)從一個(gè)位置流向另一個(gè)位置。流是字節(jié)的序列。11/26/202252第8章輸入/輸出流對(duì)象流的概念所謂流(stream)是指數(shù)據(jù)從一個(gè)位置流向另一個(gè)輸入/輸出是一種數(shù)據(jù)傳遞操作,可以看作字符序列在計(jì)算機(jī)內(nèi)存與外設(shè)之間的流動(dòng),C++將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽象為“流”。流動(dòng)的方向不同,構(gòu)成輸入/輸出流,即I/O流。11/26/202253第8章輸入/輸出流對(duì)象輸入/輸出是一種數(shù)據(jù)傳遞操作,可以看作字符序列在計(jì)算機(jī)內(nèi)存與I/O流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序,也可以從程序流向屏幕或磁盤文件。從流中獲取數(shù)據(jù)的操作稱為提取操作,向流中添加數(shù)據(jù)的操作稱為插入操作。數(shù)據(jù)的輸入/輸出就是通過I/O流來實(shí)現(xiàn)的。11/26/202254第8章輸入/輸出流對(duì)象I/O流在C++程序中,數(shù)據(jù)可以從鍵盤流入到程序,也可以從I/O流類庫的層次結(jié)構(gòu)C++編譯系統(tǒng)提供的I/O流類庫含有兩個(gè)平行基類:streambufiosios類有4個(gè)直接派生類:輸入流類istream輸出流類ostream文件流類fstreambase串流類strstreambase11/26/202255第8章輸入/輸出流對(duì)象I/O流類庫的層次結(jié)構(gòu)C++編譯系統(tǒng)提供的I/O流類庫含有標(biāo)準(zhǔn)輸入/輸出流對(duì)象標(biāo)準(zhǔn)I/O流預(yù)定義了4個(gè)流類對(duì)象:cin、cout、cerr、clog。操作系統(tǒng)給把外設(shè)用文件名的方式進(jìn)行管理,因此程序設(shè)計(jì)要訪問外設(shè)就跟訪問文件一樣方便。11/26/202256第8章輸入/輸出流對(duì)象標(biāo)準(zhǔn)輸入/輸出流對(duì)象標(biāo)準(zhǔn)I/O流預(yù)定義了4個(gè)流類對(duì)象:cinI/O分為無格式支持的低級(jí)I/O和具有格式支持的高級(jí)I/O。無格式支持的低級(jí)I/O以基本字節(jié)為操作對(duì)象,有格式支持的高級(jí)I/O把若干字節(jié)組合成有意義的單位,如整數(shù)、浮點(diǎn)數(shù)、字符、字符串及用戶自定義類型等等。11/26/202257第8章輸入/輸出流對(duì)象I/O分為無格式支持的低級(jí)I/O和具有格式支持的高級(jí)I/O。無格式輸入/輸出無格式輸入/輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)行的輸入/輸出。按默認(rèn)約定,每個(gè)C++程序都能使用標(biāo)準(zhǔn)I/O流,如標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出。cin用來處理標(biāo)準(zhǔn)輸入,即鍵盤輸入;cout用來處理標(biāo)準(zhǔn)輸出,即屏幕輸出。它們被定義在iostream.h頭文件中。在使用cout和cin前,要用編譯預(yù)處理命令將所使用的頭文件包含到源程序中,其格式如下:#include<iostream.h>11/26/202258第8章輸入/輸出流對(duì)象無格式輸入/輸出無格式輸入/輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)行無格式輸出“<<”是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)象cout上,實(shí)現(xiàn)默認(rèn)格式的屏幕輸出。使用cout輸出表達(dá)式值到屏幕上的格式如下:

cout<<E1<<E2<<…<<Em;

其中,E1、E2、…、Em為均為表達(dá)式。功能是計(jì)算各表達(dá)式的值,并將結(jié)果輸出到屏幕當(dāng)前光標(biāo)位置處。11/26/202259第8章輸入/輸出流對(duì)象無格式輸出“<<”是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)象co無格式輸出cout是ostream流類的對(duì)象,它在iostream頭文件中作為全局對(duì)象定義,其格式如下:ostreamcout(stdout);其中,stdout表示標(biāo)準(zhǔn)輸出設(shè)備名(屏幕)。在ostream流類中,對(duì)應(yīng)每個(gè)基本數(shù)據(jù)類型定義運(yùn)算符“<<”重載函數(shù)為友元,它們?cè)趏stream中聲明:ostream&operator<<(ostream&dest,char*pSource);ostream&operator<<(ostream&dest,intsource);ostream&operator<<(ostream&dest,charsource);11/26/202260第8章輸入/輸出流對(duì)象無格式輸出cout是ostream流類的對(duì)象,它在iost無格式輸入“>>”是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象cin上,實(shí)現(xiàn)默認(rèn)格式的鍵盤輸入。使用cin將數(shù)據(jù)輸入到變量的格式如下:

cin>>V1>>V2>>…>>Vn;

其中,V1、V2、…、Vn都是變量。功能是暫停執(zhí)行程序,等待用戶從鍵盤輸入數(shù)據(jù),各數(shù)據(jù)間用空格或Tab鍵分隔,輸入數(shù)據(jù)類型要與接受變量類型一致,輸完后,按回車鍵結(jié)束。11/26/202261第8章輸入/輸出流對(duì)象無格式輸入“>>”是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象ci無格式輸入cin是istream流類的對(duì)象,它在iostream頭文件中作為全局對(duì)象定義,其格式如下:istreamcin(stdin);在istream流類,對(duì)應(yīng)每個(gè)基本數(shù)據(jù)類型定義運(yùn)算符“>>”重載函數(shù)為友元,它們同樣也在ostream中聲明:istream&operator>>(istream&sour,char*pDes);istream&operator>>(istream&sour,intdes);istream&operator>>(istream&sour,chardes);11/26/202262第8章輸入/輸出流對(duì)象無格式輸入cin是istream流類的對(duì)象,它在iostr輸入輸出的格式控制C++提供了兩種格式化輸入/輸出方式:一種是用ios類成員函數(shù)進(jìn)行格式化輸入輸出另一種是用專門的操作符函數(shù)進(jìn)行格式化輸入輸出11/26/202263第8章輸入/輸出流對(duì)象輸入輸出的格式控制C++提供了兩種格式化輸入/輸出方式:1用ios類成員函數(shù)格式化ios類成員函數(shù)主要是通過對(duì)狀態(tài)標(biāo)志、輸出寬度、填充字符以及輸出精度的操作來完成輸入/輸出格式化。枚舉量定義在ios類中,因此引用時(shí)必須包含ios::前綴。使用時(shí)應(yīng)該全部用符號(hào)名,絕不要用數(shù)值。例8-3示例設(shè)置狀態(tài)標(biāo)志。11/26/202264第8章輸入/輸出流對(duì)象用ios類成員函數(shù)格式化ios類成員函數(shù)主要是通過對(duì)狀態(tài)用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作

ios類有3個(gè)成員函數(shù)可以對(duì)狀態(tài)標(biāo)志進(jìn)行操作,并且定義了一個(gè)long型數(shù)據(jù)成員記錄當(dāng)前狀態(tài)標(biāo)志。這些狀態(tài)標(biāo)志可用位或運(yùn)算符“|”進(jìn)行組合。用setf函數(shù)設(shè)置狀態(tài)標(biāo)志,其一般格式如下:

longios::setf(longflags)11/26/202265第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作ios類有3個(gè)成員函數(shù)可用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作清除狀態(tài)標(biāo)志用unsetf函數(shù)清除狀態(tài)標(biāo)志,其一般格式如下:

longios::unsetf(longflags)11/26/202266第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作清除狀態(tài)標(biāo)志11/22/2用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用函數(shù)flags取狀態(tài)標(biāo)志有兩種形式,其格式分別如下:

longios::flags()longios::flags(longflag)例8-4示例對(duì)狀態(tài)標(biāo)志的操作。11/26/202267第8章輸入/輸出流對(duì)象用ios成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用函數(shù)flags取狀態(tài)標(biāo)志用ios成員函數(shù)設(shè)置輸出寬度設(shè)置輸出寬度函數(shù)有兩種形式,其格式分別如下:

intios::width(intlen) intios::width()第一種形式是設(shè)置輸出寬度,并返回原來的輸出寬度;第二種形式是返回當(dāng)前輸出寬度,輸出寬度為0。11/26/202268第8章輸入/輸出流對(duì)象用ios成員函數(shù)設(shè)置輸出寬度設(shè)置輸出寬度函數(shù)有兩種形式,其格設(shè)置填充字符填充字符的作用是當(dāng)輸出值不滿輸出寬度時(shí)用填充字符來填充,默認(rèn)填充字符為空格。它與width()函數(shù)配合使用,否則沒有意義。設(shè)置填充字符函數(shù)有兩種形式,其格式分別如下:

charios::fill(charch)charios::fill()第一種形式是重新設(shè)置填充字符,并返回設(shè)置前的填充字符;第二種形式是返回當(dāng)前的填充字符。11/26/202269第8章輸入/輸出流對(duì)象設(shè)置填充字符填充字符的作用是當(dāng)輸出值不滿輸出寬度時(shí)用填充字符設(shè)置輸出精度設(shè)置浮點(diǎn)數(shù)輸出精度有兩種形式,其格式分別如下:

intios::precision(intp)intios::precision()第一種形式是重新設(shè)置輸出精度,并返回設(shè)置前的輸出精度;第二種形式是返回當(dāng)前的輸出精度。11/26/202270第8章輸入/輸出流對(duì)象設(shè)置輸出精度設(shè)置浮點(diǎn)數(shù)輸出精度有兩種形式,其格式分別如下:例8-6示例設(shè)置輸出寬度、填充字符、輸出精度。11/26/202271第8章輸入/輸出流對(duì)象11/22/202228第8章輸入/輸出流對(duì)象用操作符函數(shù)格式化為了不直接以標(biāo)志位的方式去處理流的狀態(tài),c++標(biāo)準(zhǔn)庫提供了標(biāo)準(zhǔn)的操作符函數(shù)專門操控這些狀態(tài)。這組函數(shù)不屬于任何類成員,定義在iomanip.h頭文件中。將它們用在提取運(yùn)算符“>>”或插入運(yùn)算符“<<”后面來設(shè)定輸入/輸出格式,即在讀寫對(duì)象之間插入一個(gè)修改狀態(tài)的操作。其中有些函數(shù)沒有參數(shù),所以又叫操作符。

11/26/202272第8章輸入/輸出流對(duì)象用操作符函數(shù)格式化為了不直接以標(biāo)志位的方式去處理流的狀態(tài),設(shè)置輸入/輸出寬度函數(shù)setw(int)設(shè)置輸出填充字符函數(shù)setfill(int)

設(shè)置輸出精度函數(shù)setprecision(int)設(shè)置輸入/輸出整型數(shù)數(shù)制函數(shù)dec、hex和oct取消輸入結(jié)束符函數(shù)ws

控制換行操作符endl

代表輸出單字符“\0”的操作符ends11/26/202273第8章輸入/輸出流對(duì)象設(shè)置輸入/輸出寬度函數(shù)setw(int)11/22/2022例8-7用操作符函數(shù)示例設(shè)置輸入/輸出寬度。11/26/202274第8章輸入/輸出流對(duì)象11/22/202231第8章輸入/輸出流對(duì)象解決問題P374-37711/26/202275第8章輸入/輸出流對(duì)象解決問題P374-37711/22/202232第8章輸入/提出問題如何對(duì)文本文件和二進(jìn)制文件進(jìn)行輸入輸出操作?11/26/202276第8章輸入/輸出流對(duì)象提出問題如何對(duì)文本文件和二進(jìn)制文件進(jìn)行輸入輸出操作?11/2文件的輸入/輸出C++把文件看作是一個(gè)字符(字節(jié))的序列,即由一個(gè)個(gè)字符(字節(jié))順序組成。根據(jù)數(shù)據(jù)的組織形式,可分為ASCII碼文件和二進(jìn)制文件。ASCII碼文件又稱為文本文件,它的每一個(gè)字節(jié)存放一個(gè)ASCII碼,

溫馨提示

  • 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)論