版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第15章C++輸入/輸出系統(tǒng)基礎(chǔ)15.1C++中的流概述15.2輸出流15.3輸入流15.4成員函數(shù)read和write的無格式輸入/輸出15.5流操縱算子小結(jié)練習(xí)題本章要點(diǎn):
C++?中的流;
C++?輸出流;
C++?輸入流;
C++?流算子。
15.1C++?中的流概述
和C的I/O系統(tǒng)一樣,C++的I/O系統(tǒng)仍然是以字節(jié)流的形式實(shí)現(xiàn)的。流(Stream)實(shí)際上就是一個(gè)字節(jié)序列,它既可以從輸入設(shè)備(如鍵盤(默認(rèn)的標(biāo)準(zhǔn)輸入設(shè)備)、磁盤、網(wǎng)絡(luò)連接等)流向計(jì)算機(jī)內(nèi)存,亦可以從計(jì)算機(jī)內(nèi)存流向輸出設(shè)備(顯示器(默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備)、打印機(jī)、磁盤、網(wǎng)絡(luò)連接等)。流是一種既能產(chǎn)生信息又可以消耗信息的邏輯設(shè)備,它通過I/O系統(tǒng)與一個(gè)物理設(shè)備相連。盡管流所連接的物理設(shè)備可以完全不同,但是所有的流以同樣的方式工作,因此可以利用同樣的I/O函數(shù)操作所有類型的物理設(shè)備。例如,可以利用同樣的函數(shù)把信息寫到文件、打印機(jī)或屏幕。輸入/輸出的字節(jié)可以是ASCII字符、內(nèi)部格式的原始數(shù)據(jù)、圖形圖像、數(shù)字音頻、數(shù)字視頻或其它任何應(yīng)用程序所需要的信息。
C++提供了低級(jí)和高級(jí)的I/O功能。低級(jí)I/O功能(即無格式的I/O)通常只在設(shè)備和內(nèi)存之間傳輸一些字節(jié)。這種傳輸過程以單個(gè)字節(jié)為單位,它能進(jìn)行高速、大容量的傳輸,但使用起來不夠便利。
高級(jí)I/O(即格式化I/O)把若干個(gè)字節(jié)組合成某種類型(基本類型或自定義類型)的數(shù)據(jù)。這種面向類型的I/O更適合于大多數(shù)情況下的輸入/輸出,但在處理大容量的I/O時(shí)性能不如低級(jí)I/O。15.1.1C++的輸入/輸出流類庫中的頭文件
C++的輸入/輸出流類庫提供了數(shù)百種I/O功能,其I/O流類庫的接口部分包含在幾個(gè)頭文件中。
頭文件<iostream>包含了操作所有輸入/輸出流所需的基本信息,因此在進(jìn)行輸入/輸出時(shí)都應(yīng)包含該頭文件。另外,在<iostream>中定義了cin、cout、cerr和clog四個(gè)流對(duì)象,它們分別對(duì)應(yīng)于標(biāo)準(zhǔn)輸入流(鍵盤)、標(biāo)準(zhǔn)輸出流(屏幕)、非緩沖和經(jīng)緩沖的標(biāo)準(zhǔn)錯(cuò)誤流,該頭文件中還提供了無格式的I/O和格式化的I/O功能。在進(jìn)行格式化的I/O時(shí),如果流中帶有含參數(shù)的流操縱算子(見本章后續(xù)內(nèi)容),則必須包含<iomanip>頭文件。
<cfstream>頭文件中包含了由用戶控制的文件處理操作。關(guān)于文件操作的內(nèi)容本書不做介紹,有興趣的讀者可參閱相關(guān)文獻(xiàn)資料。15.1.2輸入/輸出流類和對(duì)象
C++的輸入/輸出流類庫中包含了許多用于處理I/O操作的類。其中,類istream支持流的輸入操作,類ostream支持流的輸出操作,類iostream同時(shí)支持流的輸入和輸出操作。
類istream和ostream是通過單重繼承從基類ios類派生而來的。類iostream是通過多重繼承從類istream和ostream派生而來的。在C++的I/O系統(tǒng)中,通過重載左移“<<”操作符(流插入運(yùn)算符)提供了流的輸出操作;通過重載的右移“>>”操作符(流讀取運(yùn)算符)提供了流的輸入操作。這兩個(gè)重載的運(yùn)算符可以和標(biāo)準(zhǔn)流對(duì)象cin(istream類對(duì)象)、cout(ostream類對(duì)象)、cerr(ostream類帶緩沖的錯(cuò)誤流對(duì)象)和clog(ostream類不帶緩沖的流對(duì)象)以及自定義類型的對(duì)象一起使用。
C++中的文件處理用類ifstream完成文件的輸入操作,用類ofstream完成文件的輸出操作,用類fstream完成文件的輸入/輸出操作。
在C++的I/O系統(tǒng)中還有相當(dāng)多的類用于支持流的I/O操作,但這里所列出的類能夠?qū)崿F(xiàn)多數(shù)程序所需要的絕大部分功能。若想更多地了解C++的I/O系統(tǒng),請(qǐng)參看C++類庫指南或其它相關(guān)文獻(xiàn)資料。C++I/O系統(tǒng)的類的繼承層次如圖15.1所示。圖15.1C++I/O系統(tǒng)類層次圖
15.2輸出流
C++的類ostream提供了無格式和格式化輸出的功能,其中包括:用流插入運(yùn)算符輸出基本類型和string類型的數(shù)據(jù);用成員函數(shù)put輸出字符;用成員函數(shù)write進(jìn)行無格式化的輸出;輸出十進(jìn)制、八進(jìn)制、十六進(jìn)制格式的整數(shù);輸出各種精度的浮點(diǎn)數(shù),輸出強(qiáng)制帶有小數(shù)點(diǎn)的浮點(diǎn)數(shù)以及用科學(xué)計(jì)數(shù)法和定點(diǎn)計(jì)數(shù)法表示的浮點(diǎn)數(shù),輸出在指定域?qū)拑?nèi)對(duì)齊的數(shù)據(jù);輸出在域?qū)拑?nèi)用指定字符填充空位的數(shù)據(jù);輸出科學(xué)計(jì)數(shù)法和十六進(jìn)制計(jì)數(shù)法中的大寫字母等。流插入運(yùn)算符“<<”可實(shí)現(xiàn)流的輸出。它可默認(rèn)輸出基本類型、string類型、char*類型的值。若需輸出自定義類型對(duì)象的值,需在自定義類型中重載“<<”運(yùn)算符(詳見第13章操作符過載內(nèi)容)。另外,“<<”運(yùn)算符還可計(jì)算輸出表達(dá)式的值。下面給出一個(gè)程序示例,以展示“<<”運(yùn)算符的基本用法。程序運(yùn)行輸出結(jié)果:
WelcometoC++!
WelcometoC++!
i=10;d=3.14159;c=a;b=1;
23plus34is57
Thevalueofstris:test
Theaddressofstris:00417734
A
AB
15.3輸入流
C++I/O系統(tǒng)的輸入流類為istream。istream類提供了輸入的基本操作。
15.3.1流讀取運(yùn)算符
在C++I/O系統(tǒng)中,輸入一般是通過流讀取運(yùn)算符“>>”實(shí)現(xiàn)的。流讀取運(yùn)算符會(huì)跳過輸入流中的空格、Tab鍵、換行符等空白字符?!?gt;>”運(yùn)算符默認(rèn)可讀取基本類型、string類型和char*類型的數(shù)據(jù),若需要讀取自定義類型的數(shù)據(jù),需在自定義類型中過載流讀取運(yùn)算符“>>”(見第13章操作符過載中的相關(guān)內(nèi)容)?!?gt;>”一次可讀取一個(gè)某種類型的數(shù)據(jù),亦可連續(xù)使用,從左至右讀取若干個(gè)類型的數(shù)據(jù)。由于輸入流(istream)的父類(ios)過載了一個(gè)強(qiáng)制的類型轉(zhuǎn)換運(yùn)算符,它可將一個(gè)輸入流類型轉(zhuǎn)換成一個(gè)void*類型的指針,因此當(dāng)讀取數(shù)據(jù)發(fā)生錯(cuò)誤或遇到輸入結(jié)束時(shí)(如^z),指針值為0。利用這一特性,常??梢杂妙愃芻in>>x這樣的表達(dá)式作為條件或循環(huán)語句中的邏輯判斷條件。下面給出一個(gè)程序示例,以展示流讀取運(yùn)算符的基本用法。15.3.2用于輸入的一些成員函數(shù)
下面討論在C++的輸入實(shí)例類中常用的一些成員函數(shù)。
get方法可從指定的輸入流中讀取一個(gè)字符,包括空白字符,并返回該字符。當(dāng)遇到輸入流中的文件結(jié)束符時(shí),get方法返回EOF(文件結(jié)束符)。
get方法具有三種過載形式:
(1)不帶參數(shù)的get。它從指定的輸入流中讀取一個(gè)字符(包括空白字符),并返回該字符。
(2)帶一個(gè)參數(shù)的get。它從指定的輸入流中讀取下一個(gè)字符(包括空白字符),并返回該字符。
(3)帶有三個(gè)參數(shù)的get。其參數(shù)分別是接收字符的字符數(shù)組、字符數(shù)組的大小和分隔符(默認(rèn)為‘\n’)。它在讀取比字符數(shù)組尺寸小1時(shí)結(jié)束,或者在遇到分隔符時(shí)結(jié)束。
getline用于從輸入流中讀取一字符串(包括空白字符)到一個(gè)string對(duì)象s中(如getline(cin,s))或字符數(shù)組buffer中(如cin.getline(buffer,size))。
由于用讀取運(yùn)算符“>>”讀取字符串時(shí)遇到空白字符將停止讀取,因此,需要讀取整個(gè)字符串(包含空白字符)時(shí)常常采用getline方法。
ignore用于在需要時(shí)跳過輸入流中指定數(shù)量的字符(默認(rèn)個(gè)數(shù)是1),或遇到指定的分隔符(默認(rèn)分隔符是EOF,使得ignore在讀文件時(shí)跳過文件末尾)時(shí)結(jié)束。
putback方法將最后一次用get從輸入流中提取的字符放回到輸入流中。
成員函數(shù)peek返回輸入流中的下一個(gè)字符,但并不將其從輸入流中刪除。
15.4成員函數(shù)read和write的無格式輸入/輸出
成員函數(shù)read和write可實(shí)現(xiàn)無格式的輸入/輸出。這兩個(gè)函數(shù)分別用于將若干字節(jié)寫入到字符數(shù)組或從字符數(shù)組中讀出。這些字節(jié)都是未經(jīng)過任何格式化的,僅以原始數(shù)據(jù)的形式輸入或輸出。
成員函數(shù)read將指定個(gè)數(shù)的字符輸入到字符數(shù)組中。如果讀取的字符個(gè)數(shù)少于指定的數(shù)目,可以設(shè)置標(biāo)志位faibit(見本章后續(xù)內(nèi)容)。
下面給出一個(gè)程序示例,以展示上述幾個(gè)成員函數(shù)的基本功能。程序運(yùn)行輸出結(jié)果:
Enterasentence:
Iamateacher.
^Z
Thesentenceenteredwas:
Iamateacher.
15.5流?操?縱?算?子
采用cin、cout可進(jìn)行各種類型對(duì)象的無格式輸入或輸出。若需進(jìn)行格式化的輸入/輸出,需采用C++流類庫中提供的各種輸入/輸出流操縱算子。流操縱算子具有如下功能:設(shè)置域?qū)挘O(shè)置數(shù)值精度,設(shè)置和清除格式化,設(shè)置域填充字符,刷新流,在輸出流中插入換行符并刷新該流,在輸出流中插入空字符,跳過輸入流中的空白字符,等等。下面簡(jiǎn)要介紹一下這些流操縱算子。15.5.1設(shè)置整數(shù)流的基數(shù)
在C++中,一個(gè)整數(shù)通常默認(rèn)為是十進(jìn)制的,如想改變流中整數(shù)的基數(shù),可插入流操縱算子dec(恢復(fù)到十進(jìn)制)、oct(設(shè)置成八進(jìn)制)、hex(設(shè)置成十六進(jìn)制)。這些流操縱算子定義在頭文件<iostream>中。
也可以用流操縱算子setbase來改變基數(shù)。流操縱算子setbase帶有一個(gè)參數(shù)10、8或16,表明所欲設(shè)置的進(jìn)制。由于setbase帶有參數(shù),故常稱其為參數(shù)化的操縱算子。本章的后續(xù)內(nèi)容還會(huì)講到一些參數(shù)化的操縱算子。使用參數(shù)化的操縱算子需包含頭文件<iomanip>。15.5.2設(shè)置浮點(diǎn)數(shù)精度
在C++中可利用流操縱算子setprecision和成員函數(shù)percision來控制浮點(diǎn)數(shù)的精度。設(shè)置了精度以后,該精度對(duì)之后所有的浮點(diǎn)數(shù)輸出都有效,直到下一次設(shè)置精度為止。無參數(shù)的成員函數(shù)percision返回當(dāng)前設(shè)置的精度。
下面給出一個(gè)程序示例,以展示上述設(shè)置浮點(diǎn)數(shù)精度的操縱算子和成員函數(shù)的基本用法。
1.4142
1.41421
1.414214
1.4142136
1.41421356
1.414213562
Precisionsetbythesetprecisionmanipulator:
1
1.4
1.41
1.414
1.4142
1.41421
1.414214
1.4142136
1.41421356
1.41421356215.5.3設(shè)置輸出域?qū)?/p>
可用流操縱算子setw(帶參數(shù)的流操縱算子)和成員函數(shù)width進(jìn)行輸出域?qū)挼脑O(shè)置。如果輸出數(shù)據(jù)所需的寬度比設(shè)置的域?qū)捫?,則空位用填充字符進(jìn)行填充;如果輸出數(shù)據(jù)所需的寬度比設(shè)置的域?qū)挻螅瑒t輸出數(shù)據(jù)不會(huì)被截?cái)?,系統(tǒng)會(huì)輸出所有的數(shù)據(jù)位。
注意:setw僅對(duì)一次輸出流起作用。
下面給出一個(gè)程序示例,以展示流操縱算子setw和成員函數(shù)width的基本用法。小結(jié)
C++的I/O操作是以字節(jié)流的形式實(shí)現(xiàn)的。流實(shí)際上就是字節(jié)序列。頭文件iostream.h包括了操作所有輸入/輸出所需的基本信息,因此在大多數(shù)C++程序中都應(yīng)該包含這個(gè)頭
文件。
C++提供了無格式I/O和格式化I/O兩種操作。默認(rèn)情況下,C++采用無格式的I/O;當(dāng)需要格式化的輸入/輸出時(shí),可采用帶參數(shù)的流操作算子實(shí)現(xiàn)。頭文件iomanip.h包含了帶參數(shù)流算子的相關(guān)信息。在C++輸入/輸出類層次中,類istream支持流的輸入操作,類ostream支持流的輸出操作,類iostream同時(shí)支持流的輸入與輸出操作。類istream和ostream是通過單一繼承從基類ios繼承而來的。
流插入運(yùn)算符“<<”可實(shí)現(xiàn)流的輸出,它自動(dòng)識(shí)別并輸出C++中的基本類型及字符串類型的量。若欲輸出自定義類型的量,在自定義類型中應(yīng)重載該運(yùn)算符。
流讀取運(yùn)算符“>>”可實(shí)現(xiàn)流的輸入,它自動(dòng)識(shí)別并輸入C++中的基本類型及字
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度膩?zhàn)赢a(chǎn)品銷售與售后服務(wù)合同2篇
- 二零二五年度環(huán)保技術(shù)開發(fā)合伙投資合同
- 2024版學(xué)校污水處理設(shè)施清掏協(xié)議版B版
- 忻州師范學(xué)院《建筑工程評(píng)估基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年水利工程勞務(wù)派遣與設(shè)備租賃合同3篇
- 西安工商學(xué)院《圖像處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢警官職業(yè)學(xué)院《低頻模擬電路》2023-2024學(xué)年第一學(xué)期期末試卷
- 文山學(xué)院《房屋建筑學(xué)課程設(shè)討》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年生物制藥技術(shù)轉(zhuǎn)讓及合作開發(fā)協(xié)議2篇
- 二零二五年度廠長(zhǎng)任期企業(yè)戰(zhàn)略規(guī)劃與執(zhí)行合同2篇
- 2024年滄州經(jīng)濟(jì)開發(fā)區(qū)招聘社區(qū)工作者筆試真題
- 中外美術(shù)史試題及答案
- 2025年安徽省銅陵市公安局交警支隊(duì)招聘交通輔警14人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 公共政策分析 課件 第8章政策評(píng)估;第9章政策監(jiān)控
- 人教版八年級(jí)上學(xué)期物理期末復(fù)習(xí)(壓軸60題40大考點(diǎn))
- 企業(yè)環(huán)保知識(shí)培訓(xùn)課件
- 2024年度管理評(píng)審報(bào)告
- 暨南大學(xué)《微觀經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)藥銷售合規(guī)培訓(xùn)
- DB51-T 5038-2018 四川省地面工程施工工藝標(biāo)準(zhǔn)
- 三年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案
評(píng)論
0/150
提交評(píng)論