




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第7 7章章 輸入輸出流輸入輸出流7.1 C+的輸入和輸出的輸入和輸出7.1.1 輸入輸出的概念輸入輸出的概念 操作系統(tǒng)操作系統(tǒng)將每個(gè)與主機(jī)相連的將每個(gè)與主機(jī)相連的輸入輸出設(shè)備輸入輸出設(shè)備都看都看作作文件文件。鍵盤鍵盤是是輸入文件輸入文件,屏幕屏幕為為輸出文件輸出文件。此。此外外磁盤文件磁盤文件既可以作為既可以作為輸入文件輸入文件,也可以作為,也可以作為輸輸出文件出文件 C+的的輸入輸入與與輸出輸出主要包括以下主要包括以下2方面的內(nèi)容:方面的內(nèi)容: 標(biāo)準(zhǔn)的輸入輸出,簡稱標(biāo)準(zhǔn)標(biāo)準(zhǔn)的輸入輸出,簡稱標(biāo)準(zhǔn)I/O,也就是從鍵盤輸入數(shù),也就是從鍵盤輸入數(shù)據(jù),從屏幕輸出數(shù)據(jù)據(jù),從屏幕輸出數(shù)據(jù) 文件的輸入輸
2、出,簡稱文件文件的輸入輸出,簡稱文件I/O,從磁盤文件輸入數(shù)據(jù),從磁盤文件輸入數(shù)據(jù),將結(jié)果輸出到磁盤文件。近年來也可用光盤文件和將結(jié)果輸出到磁盤文件。近年來也可用光盤文件和U盤盤文件作為輸入輸出文件文件作為輸入輸出文件 C+系統(tǒng)提供了功能強(qiáng)大的系統(tǒng)提供了功能強(qiáng)大的I/O類庫類庫,使用,使用不同的不同的類類去去實(shí)現(xiàn)各種功能實(shí)現(xiàn)各種功能7.1.2 C+的輸入輸出流的輸入輸出流 輸入輸入和和輸出輸出指指數(shù)據(jù)傳送的過程數(shù)據(jù)傳送的過程,數(shù)據(jù)數(shù)據(jù)像像流水流水一樣一樣從從一個(gè)地方流向另一個(gè)地方一個(gè)地方流向另一個(gè)地方。C+將此過程稱將此過程稱為流為流(stream) C+的的輸入輸出流輸入輸出流是由若干是由若
3、干字節(jié)組成的字節(jié)序列字節(jié)組成的字節(jié)序列,這些字節(jié)中的這些字節(jié)中的數(shù)據(jù)數(shù)據(jù)按照順序按照順序從一個(gè)地方傳送到另一從一個(gè)地方傳送到另一地方地方。流指信息從。流指信息從源到目的端的流動源到目的端的流動 在輸入數(shù)據(jù)時(shí),字節(jié)流從在輸入數(shù)據(jù)時(shí),字節(jié)流從輸入設(shè)備輸入設(shè)備流向流向內(nèi)存內(nèi)存,在輸,在輸出數(shù)據(jù)時(shí),字節(jié)流從出數(shù)據(jù)時(shí),字節(jié)流從內(nèi)存內(nèi)存流向流向輸出設(shè)備輸出設(shè)備 在在C+中,中,輸入輸出流輸入輸出流被被定義為類定義為類。C+的的I/O庫庫中的中的類類稱為稱為流類流類。采用。采用流類流類定義的定義的對象對象稱為稱為流對象流對象I/O庫常用的流類庫常用的流類 ios:抽象基類,由:抽象基類,由ios派生出類派生
4、出類istream和類和類ostream istream:通用輸入流類,支持輸入操作。:通用輸入流類,支持輸入操作。 ostream:通用輸出流類,支持輸出操作。:通用輸出流類,支持輸出操作。 iostream:通用輸入輸出流類,由類:通用輸入輸出流類,由類istream和類和類ostream派生,支持輸入輸出操作。派生,支持輸入輸出操作。 ifstream:輸入文件流類,由類:輸入文件流類,由類istream 所派生,支持輸入所派生,支持輸入文件操作。文件操作。 ofstream:輸出文件流類,由類:輸出文件流類,由類ostream 所派生,支持輸所派生,支持輸出文件操作。出文件操作。 fs
5、tream:輸入輸出文件流類,由類:輸入輸出文件流類,由類iostream所派生,支持所派生,支持輸入輸出文件操作。輸入輸出文件操作。I/O庫常用流類的頭文件庫常用流類的頭文件 I/O庫不同類的聲明被包含在不同的頭文件中,常庫不同類的聲明被包含在不同的頭文件中,常用的流類的頭文件有:用的流類的頭文件有: iostream(或(或iostream.h):包含對輸入輸出流進(jìn)行操):包含對輸入輸出流進(jìn)行操作所需的基本信息,包括類作所需的基本信息,包括類ios,類,類istream,類,類ostream和類和類iostream的聲明。的聲明。 fstream(fstream.h):包含用戶管理的文件的
6、):包含用戶管理的文件的I/O操作,操作,包括類包括類ifstream,類,類ofstream和類和類fstream的聲明。的聲明。 iomanip(iomanip.h):在使用輸出流控制符時(shí)應(yīng)包含):在使用輸出流控制符時(shí)應(yīng)包含此頭文件。此頭文件。7.2 標(biāo)準(zhǔn)輸出流對象標(biāo)準(zhǔn)輸出流對象cout7.2.1 cout cout是是console output的縮寫,表示在的縮寫,表示在控制臺控制臺(終(終端顯示器)的端顯示器)的輸出輸出。cout是輸出流類是輸出流類ostream的對的對象象 cout中的數(shù)據(jù)是采用輸出運(yùn)算符中的數(shù)據(jù)是采用輸出運(yùn)算符“”順序加入的。順序加入的。比如:比如:cout 我
7、我 努力學(xué)習(xí)努力學(xué)習(xí) C+。 endl; 在執(zhí)行時(shí)將在執(zhí)行時(shí)將“我我”、“努力學(xué)習(xí)努力學(xué)習(xí)”、“C+?!焙秃蚭ndl依次加入到依次加入到cout流中,然后流中,然后cout就將它們傳就將它們傳送到顯示器,在顯示器上輸出:送到顯示器,在顯示器上輸出:我努力學(xué)習(xí)我努力學(xué)習(xí)C+。7.2.2 格式輸出格式輸出在前面輸出數(shù)據(jù)時(shí),在前面輸出數(shù)據(jù)時(shí),沒有指定輸出格式?jīng)]有指定輸出格式,由系統(tǒng)根據(jù)數(shù)據(jù)類型選取,由系統(tǒng)根據(jù)數(shù)據(jù)類型選取默默認(rèn)的格式認(rèn)的格式,但有時(shí)希望數(shù)據(jù)按,但有時(shí)希望數(shù)據(jù)按指定的格式輸出指定的格式輸出,比如對輸出的,比如對輸出的小數(shù)只小數(shù)只保留兩位小數(shù)保留兩位小數(shù)等。等。http:/ 輸出格式狀態(tài)
8、輸出格式狀態(tài) 輸出格式狀態(tài)是在類輸出格式狀態(tài)是在類ios中定義的枚舉值,用于指定輸出數(shù)中定義的枚舉值,用于指定輸出數(shù)據(jù)的格式。所以在引用這些格式狀態(tài)時(shí)要在前面加上類名據(jù)的格式。所以在引用這些格式狀態(tài)時(shí)要在前面加上類名ios和作用域運(yùn)算符和作用域運(yùn)算符“:”。常用輸出格式狀態(tài)見表。常用輸出格式狀態(tài)見表7.1。 表表7.1 常用輸出格式狀態(tài)常用輸出格式狀態(tài)使用輸出流控制符控制輸出格式使用輸出流控制符控制輸出格式 輸出流控制符是在頭文件輸出流控制符是在頭文件iomanip(或(或iomanip.h)中定義)中定義的,因而程序中應(yīng)當(dāng)包含頭文件的,因而程序中應(yīng)當(dāng)包含頭文件iomanip(或(或ioman
9、ip.h)。)。常用輸出流控制符見表常用輸出流控制符見表7.2。 表表7.2 常用輸出流控制符常用輸出流控制符例例7.1 輸出流控制符的使用方法示例。輸出流控制符的使用方法示例。#include / 編譯預(yù)處理命令編譯預(yù)處理命令#include / 包含輸出流控制符的定義包含輸出流控制符的定義using namespace std;/ 使用命名空間使用命名空間std int main(void)/ 主函數(shù)主函數(shù)main(void)cout setiosflags(ios:left)/ 設(shè)置左對齊設(shè)置左對齊 setw(10)/ 設(shè)置輸出項(xiàng)寬度為設(shè)置輸出項(xiàng)寬度為10 setfill(*)/ 設(shè)置填
10、充字符為設(shè)置填充字符為* 左對齊左對齊 endl/ 輸出內(nèi)容輸出內(nèi)容 resetiosflags(ios:left);/ 終止左對齊終止左對齊cout setiosflags(ios:right)/ 設(shè)置右對齊設(shè)置右對齊 setw(10)/ 設(shè)置輸出項(xiàng)寬度為設(shè)置輸出項(xiàng)寬度為10,此項(xiàng)不能省略,此項(xiàng)不能省略 setfill(*)/ 設(shè)置填充字符為設(shè)置填充字符為*,此處可省略,此處可省略 右對齊右對齊 endl/ 輸出內(nèi)容輸出內(nèi)容 resetiosflags(ios:right);/ 終止右對齊終止右對齊程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:左對齊左對齊*右對齊右對齊2.33333333
11、e+0002.333333332.3333333請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .例例7.1 輸出流控制符的使用方法示例。輸出流控制符的使用方法示例。cout setiosflags(ios:scientific)/浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出 setprecision(8)/ 設(shè)置在以科學(xué)記數(shù)法格式輸出時(shí)設(shè)置在以科學(xué)記數(shù)法格式輸出時(shí),輸出輸出8位小數(shù)位數(shù)位小數(shù)位數(shù) 7.0 / 3 endl/ 輸出內(nèi)容輸出內(nèi)容 resetiosflags(ios:scientific);/ 終止浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出終止浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出cout setiosflags
12、(ios:fixed) / 設(shè)置浮點(diǎn)數(shù)以定點(diǎn)格式輸出設(shè)置浮點(diǎn)數(shù)以定點(diǎn)格式輸出 setprecision(8)/設(shè)置在以定點(diǎn)小數(shù)輸出時(shí)設(shè)置在以定點(diǎn)小數(shù)輸出時(shí),輸出輸出8位小數(shù)位數(shù),可省略位小數(shù)位數(shù),可省略 7.0 / 3 endl/ 輸出內(nèi)容輸出內(nèi)容 resetiosflags(ios:fixed);/ 終止浮點(diǎn)數(shù)以定點(diǎn)格式輸出終止浮點(diǎn)數(shù)以定點(diǎn)格式輸出cout setprecision(8)/ 設(shè)置在以一般十進(jìn)制小數(shù)形式輸出設(shè)置在以一般十進(jìn)制小數(shù)形式輸出/ 時(shí)時(shí), 輸出輸出8位有效數(shù)字,可省略位有效數(shù)字,可省略 7.0 / 3 endl;/ 輸出內(nèi)容輸出內(nèi)容system(PAUSE); / 輸出
13、系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:左對齊左對齊*右對齊右對齊2.33333333e+0002.333333332.3333333請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .使用輸出類成員函數(shù)控制輸出格式使用輸出類成員函數(shù)控制輸出格式 除可以用控制符來控制輸出格式外,還可等價(jià)地通過調(diào)用除可以用控制符來控制輸出格式外,還可等價(jià)地通過調(diào)用輸出流對象輸出流對象cout的成員函數(shù)來控制輸出格式,用于控制輸?shù)某蓡T函數(shù)來控制輸出格式,用于控制輸出格式的常用成員函數(shù)如表出格式的常用成員函數(shù)
14、如表7.3所示。所示。 表表7.3 常用輸出流控制格式的成員函數(shù)常用輸出流控制格式的成員函數(shù)例例7.2 控制輸出格式的常用成員函數(shù)使用方法示例??刂戚敵龈袷降某S贸蓡T函數(shù)使用方法示例。#include / 編譯預(yù)處理命令編譯預(yù)處理命令using namespace std;/ 使用命名空間使用命名空間std int main(void)/ 主函數(shù)主函數(shù)main()cout.setf(ios:left);/ 設(shè)置左對齊設(shè)置左對齊cout.width(10);/ 設(shè)置輸出項(xiàng)寬度為設(shè)置輸出項(xiàng)寬度為10cout.fill(*);/ 設(shè)置填充字符為設(shè)置填充字符為*cout 左對齊左對齊 endl;/ 輸
15、出內(nèi)容輸出內(nèi)容cout.unsetf(ios:left);/ 終止左對齊終止左對齊cout.setf(ios:right);/ 設(shè)置右對齊設(shè)置右對齊cout.width(10);/ 設(shè)置輸出項(xiàng)寬度為設(shè)置輸出項(xiàng)寬度為10,此項(xiàng)不能省略,此項(xiàng)不能省略cout.fill(*);/ 設(shè)置填充字符為設(shè)置填充字符為*,此處可省略,此處可省略cout 右對齊右對齊 endl;/ 輸出內(nèi)容輸出內(nèi)容cout.unsetf(ios:right);/ 終止右對齊終止右對齊程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:左對齊左對齊*右對齊右對齊2.33333333e+0002.333333332.3333333請按
16、任意鍵繼續(xù)請按任意鍵繼續(xù). . .例例7.2 控制輸出格式的常用成員函數(shù)使用方法示例。控制輸出格式的常用成員函數(shù)使用方法示例。cout.setf(ios:scientific);/ 設(shè)置浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出設(shè)置浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出cout.precision(8);/ 設(shè)置在以科學(xué)記數(shù)法格式輸出時(shí)設(shè)置在以科學(xué)記數(shù)法格式輸出時(shí),輸出輸出8位小數(shù)位數(shù)位小數(shù)位數(shù)cout 7.0 / 3 endl;/ 輸出內(nèi)容輸出內(nèi)容cout.unsetf(ios:scientific);/ 終止浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出終止浮點(diǎn)數(shù)以科學(xué)記數(shù)法格式輸出cout.setf(ios:fixed);/ 設(shè)置浮點(diǎn)
17、數(shù)以定點(diǎn)格式輸出設(shè)置浮點(diǎn)數(shù)以定點(diǎn)格式輸出cout.precision(8);/ 設(shè)置在以定點(diǎn)形式輸出時(shí)設(shè)置在以定點(diǎn)形式輸出時(shí)/ 輸出輸出8小數(shù)位有效數(shù)字,此處可省略小數(shù)位有效數(shù)字,此處可省略cout 7.0 / 3 endl;/ 輸出內(nèi)容輸出內(nèi)容cout.unsetf(ios:fixed);/ 終止浮點(diǎn)數(shù)以定點(diǎn)格式輸出終止浮點(diǎn)數(shù)以定點(diǎn)格式輸出cout.precision(8);/ 設(shè)置在以一般十進(jìn)制小數(shù)位數(shù)形式設(shè)置在以一般十進(jìn)制小數(shù)位數(shù)形式/ 輸出時(shí)輸出時(shí),輸出輸出8小數(shù)位數(shù),此處可省略小數(shù)位數(shù),此處可省略cout 7.0 / 3 endl;/ 輸出內(nèi)容輸出內(nèi)容程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行
18、時(shí)屏幕輸出如下:左對齊左對齊*右對齊右對齊2.33333333e+0002.333333332.3333333請按任意鍵繼續(xù)請按任意鍵繼續(xù). . . 7.2.3 輸出流類成員函數(shù)輸出流類成員函數(shù)put() 對于輸出單個(gè)字符,除了可用輸出運(yùn)算符對于輸出單個(gè)字符,除了可用輸出運(yùn)算符“”外,還可以用輸出流外,還可以用輸出流成員函數(shù)成員函數(shù)put()實(shí)實(shí)現(xiàn),此成員函數(shù)的使用格式一般為:現(xiàn),此成員函數(shù)的使用格式一般為:輸出流對象輸出流對象.put(ch)其中其中ch為要輸出的字符為要輸出的字符例例7.3 使用輸出流成員函數(shù)使用輸出流成員函數(shù)put()示例。示例。#include / 編譯預(yù)處理命令編譯預(yù)
19、處理命令using namespace std;/ 使用命名空間使用命名空間std int main(void)/ 主函數(shù)主函數(shù)main()char str = Hello, world!;/ 定義字符串定義字符串for (int i = strlen(str) - 1; i = 0; i-)cout.put(stri);/ 輸出第輸出第i個(gè)字符個(gè)字符cout ”將輸將輸入的數(shù)據(jù)傳送給程序的變量,采用輸入運(yùn)入的數(shù)據(jù)傳送給程序的變量,采用輸入運(yùn)算符算符 “”輸入數(shù)據(jù)時(shí),一般會自動跳過輸入數(shù)據(jù)時(shí),一般會自動跳過空格、空格、tab鍵、換行符等空白字符。鍵、換行符等空白字符。 7.3.2 輸入流類的常
20、用字符輸入的成員輸入流類的常用字符輸入的成員函數(shù)函數(shù) 除了可以用除了可以用cin和輸入運(yùn)算符和輸入運(yùn)算符“”輸入字輸入字符外,還可以使用符外,還可以使用istream類一些成員函數(shù)類一些成員函數(shù)來實(shí)現(xiàn)字符的輸入,下面將分別介紹常用來實(shí)現(xiàn)字符的輸入,下面將分別介紹常用字符輸入的流成員函數(shù)。字符輸入的流成員函數(shù)。 用用get()函數(shù)輸入字符函數(shù)輸入字符 成員函數(shù)成員函數(shù)get()用于輸入單個(gè)字符,常用使用于輸入單個(gè)字符,常用使用方式如下:用方式如下:輸入流對象輸入流對象.get() 函數(shù)返回讀入的字符。若遇到輸入流中的函數(shù)返回讀入的字符。若遇到輸入流中的文件結(jié)束符,則函數(shù)值返回文件結(jié)束標(biāo)志文件結(jié)束
21、符,則函數(shù)值返回文件結(jié)束標(biāo)志EOF (End Of File) 例例7.4 用不帶參數(shù)的用不帶參數(shù)的get()函數(shù)輸入字符。函數(shù)輸入字符。int main(void)/ 主函數(shù)主函數(shù)main()char ch;/ 字符變量字符變量cout 請輸入一行字符請輸入一行字符: endl;/ 輸入提示輸入提示ch = cin.get();/ 輸入字符輸入字符while (ch != n)cout.put(ch);/ 輸出字符輸出字符ch = cin.get();/ 輸入字符輸入字符cout endl;/ 換行換行system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)re
22、turn 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:請輸入一行字符請輸入一行字符:Hello, world!Hello, world!請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .用用getline()函數(shù)讀入一行字符函數(shù)讀入一行字符 getline()函數(shù)用于從輸入流對象中輸入一行函數(shù)用于從輸入流對象中輸入一行字符,一般使用格式如下:字符,一般使用格式如下:輸入流對象輸入流對象.getline(字符指針字符指針, 字符個(gè)數(shù)字符個(gè)數(shù)n) 如果輸入的一行字符中,字符個(gè)數(shù)小于如果輸入的一行字符中,字符個(gè)數(shù)小于n,則字符指針指向的字符串存儲實(shí)際輸入的
23、則字符指針指向的字符串存儲實(shí)際輸入的字符,如字符個(gè)數(shù)大于或等于字符,如字符個(gè)數(shù)大于或等于n,則字符指,則字符指針指向的字符串只存儲針指向的字符串只存儲n-1個(gè)字符,這是由個(gè)字符,這是由于在字符串末尾要存儲字符串結(jié)束符于在字符串末尾要存儲字符串結(jié)束符0,所以實(shí)際最多存儲所以實(shí)際最多存儲n-1個(gè)字符個(gè)字符例例7.5 用用getline()輸入一行字符。輸入一行字符。#include / 編譯預(yù)處理命令編譯預(yù)處理命令using namespace std;/ 使用命名空間使用命名空間std int main(void)/ 主函數(shù)主函數(shù)main()char s10;/ 字符串字符串cout 請輸入一行
24、字符請輸入一行字符: endl;/ 輸入提示輸入提示cin.getline(s, 10);/ 輸入一行字符輸入一行字符cout s endl;/ 輸出一行字符輸出一行字符system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:請輸入一行字符請輸入一行字符:I study C+ very hard!I study C請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .7.3.3 輸入流類的其他常用成員函數(shù)輸入流類的其他常用成員函數(shù) 除了以上介紹的用于輸入字符的成員函數(shù)
25、除了以上介紹的用于輸入字符的成員函數(shù)外,外,istream類還有其他在輸入數(shù)據(jù)時(shí)常用類還有其他在輸入數(shù)據(jù)時(shí)常用的成員函數(shù),下面將加以介紹。的成員函數(shù),下面將加以介紹。 eof()函數(shù)函數(shù) eof是英文是英文end of file的縮寫,表示的縮寫,表示“文件結(jié)文件結(jié)束束”。eof()函數(shù)的使用方式如下:函數(shù)的使用方式如下:輸入流對象輸入流對象.eof() 從輸入流對象讀取數(shù)據(jù)時(shí),如果當(dāng)前字節(jié)從輸入流對象讀取數(shù)據(jù)時(shí),如果當(dāng)前字節(jié)為文件結(jié)束符(也就是遇到文件結(jié)束),為文件結(jié)束符(也就是遇到文件結(jié)束),eof()函數(shù)值為非零值(表示真),否則為函數(shù)值為非零值(表示真),否則為0(表示假)。在標(biāo)準(zhǔn)輸入
26、流(表示假)。在標(biāo)準(zhǔn)輸入流cin中,在從鍵中,在從鍵盤上輸入時(shí),一般用盤上輸入時(shí),一般用Ctrl+Z輸入文件結(jié)束輸入文件結(jié)束符符 例例7.6 eof()函數(shù)使用示例。函數(shù)使用示例。char GetChar(istream &in=cin)/從輸入流從輸入流in中跳過空格及制表符獲取一字符中跳過空格及制表符獲取一字符char ch;/ 字符變量字符變量while ( (ch = in.get() = / 輸入的字符為空格輸入的字符為空格| ch = t)/ 或制表符或制表符&!in.eof();/ 未遇到文件結(jié)束符未遇到文件結(jié)束符return ch;/ 返回字符返回字符int main(void
27、)/ 主函數(shù)主函數(shù)main()char ch;/ 字符變量字符變量cout 請輸入一行字符請輸入一行字符: endl;/ 輸入提示輸入提示ch = GetChar();/ 輸入字符輸入字符,自動跳過空格與制表符自動跳過空格與制表符tabwhile (ch != n)cout.put(ch);/ 輸出字符輸出字符ch = GetChar();/ 輸入字符輸入字符,自動跳過空格與制表符自動跳過空格與制表符tabcout endl;/ 換行換行system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)
28、行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:請輸入一行字符請輸入一行字符:Hello, world!Hello,world!請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .peek()函數(shù)函數(shù) peek()函數(shù)用于觀測輸入流對象中的當(dāng)前字函數(shù)用于觀測輸入流對象中的當(dāng)前字符。其調(diào)用格式如下:符。其調(diào)用格式如下: 輸入流對象輸入流對象.peek() peek()函數(shù)返回輸入流對象中當(dāng)前的字符,函數(shù)返回輸入流對象中當(dāng)前的字符,但輸入流對象的當(dāng)前位置不變,并不后移。但輸入流對象的當(dāng)前位置不變,并不后移。如果要訪問的字符是文件結(jié)束符,則函數(shù)如果要訪問的字符是文件結(jié)束符,則函數(shù)值是值是EOF 例例7.7 采用采用pe
29、ek()函數(shù)修改例函數(shù)修改例7.6。char GetChar(istream &in=cin)/從輸入流從輸入流in中跳過空格及制表符獲取一字符中跳過空格及制表符獲取一字符char ch;/ 字符變量字符變量while (in.peek() != EOF/ 未遇到文件結(jié)束符未遇到文件結(jié)束符& (ch = in.get() = / 輸入的字符為空格輸入的字符為空格| ch = t);/ 或制表符或制表符return ch;/ 返回字符返回字符int main(void)/ 主函數(shù)主函數(shù)main()char ch;/ 字符變量字符變量cout 請輸入一行字符請輸入一行字符: endl;/ 輸入提示
30、輸入提示ch = GetChar();/ 輸入字符輸入字符,自動跳過空格與制表符自動跳過空格與制表符tabwhile (ch != n)cout.put(ch);/ 輸出字符輸出字符ch = GetChar();/ 輸入字符輸入字符,自動跳過空格與制表符自動跳過空格與制表符tabcout = 0 & ch x;/ 輸入雙精度實(shí)數(shù)輸入雙精度實(shí)數(shù)xcout x ;/ 輸出雙精度實(shí)數(shù)輸出雙精度實(shí)數(shù)xelse/ 非法字符非法字符cout 出現(xiàn)非法字符出現(xiàn)非法字符! endl;exit(1);/ 退出程序退出程序ch = GetChar();/ 跳過空格與制表符跳過空格與制表符tab輸入一個(gè)字符輸入一個(gè)
31、字符cout endl;/ 換行換行system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:12 3.8 1.912 3.8 1.9請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .7.4 文件操作與文件流文件操作與文件流7.4.1 文件和文件流的概念文件和文件流的概念 文件文件是一組相關(guān)數(shù)據(jù)的是一組相關(guān)數(shù)據(jù)的有序集合有序集合。從不同的角度。從不同的角度可對文件作不同的分類。從用戶的可對文件作不同的分類。從用戶的角度看角度看,文件,文件可分為可分為普通文件普通文件
32、和和設(shè)備文件設(shè)備文件兩種。兩種。 普通文件指存儲在磁盤或其它外部介質(zhì)上的一個(gè)有序普通文件指存儲在磁盤或其它外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集,可以是源文件、目標(biāo)文件、可執(zhí)行文件;也數(shù)據(jù)集,可以是源文件、目標(biāo)文件、可執(zhí)行文件;也可以是一組待處理的數(shù)據(jù)文件等可以是一組待處理的數(shù)據(jù)文件等 設(shè)備文件是與主機(jī)相聯(lián)的各種外部設(shè)備,如顯示器和設(shè)備文件是與主機(jī)相聯(lián)的各種外部設(shè)備,如顯示器和鍵盤等。在操作系統(tǒng)中,把外部設(shè)備也看作是文件來鍵盤等。在操作系統(tǒng)中,把外部設(shè)備也看作是文件來進(jìn)行管理。進(jìn)行管理。 從文件從文件編碼方式編碼方式來看,文件可分為來看,文件可分為ASCII碼碼文件和文件和二進(jìn)制二進(jìn)制文件兩種。文件兩種。
33、 ASCII碼碼文件也稱為文件也稱為文本文本文件,這種文件在磁盤中存放的文件,這種文件在磁盤中存放的每個(gè)每個(gè)字符字符對應(yīng)一個(gè)對應(yīng)一個(gè)字節(jié)字節(jié),用于存放對應(yīng)的,用于存放對應(yīng)的ASCII碼碼。例如,。例如,數(shù)數(shù)5680的存儲形式為:的存儲形式為: 共占用共占用4個(gè)字節(jié)。個(gè)字節(jié)。ASCII碼碼文件可在屏幕上按字符顯示,文件可在屏幕上按字符顯示,例如源程序文件就是例如源程序文件就是ASCII碼碼文件。文件。 由于是按由于是按字符字符顯示,顯示,因此能因此能讀懂讀懂文件內(nèi)容。文件內(nèi)容。 二進(jìn)制二進(jìn)制文件是按二進(jìn)制的編碼方式來存放的。文件是按二進(jìn)制的編碼方式來存放的。 例如,數(shù)例如,數(shù)5678的存儲形式為
34、:的存儲形式為: 00000000 00000000 00010110 00101110占用占用4個(gè)字節(jié)。個(gè)字節(jié)。 文件流文件流實(shí)際上就是以外存實(shí)際上就是以外存文件文件為輸入輸出為輸入輸出對象的對象的數(shù)據(jù)流數(shù)據(jù)流。輸出文件流輸出文件流指從指從內(nèi)存內(nèi)存流向流向外存外存文件文件的數(shù)據(jù),的數(shù)據(jù),輸入文件流輸入文件流指從外存指從外存文文件件流向流向內(nèi)存內(nèi)存的數(shù)據(jù)。的數(shù)據(jù)。 C+對磁盤文件聲明了專門的文件類對磁盤文件聲明了專門的文件類 ifstream類,從類,從istream類派生的。用于支持從類派生的。用于支持從外存文件的輸入操作。外存文件的輸入操作。 ofstream類,從類,從ostream類派
35、生的。用來支持向類派生的。用來支持向外存文件的輸出操作。外存文件的輸出操作。 fstream類,它是從類,它是從iostream類派生的。用來支類派生的。用來支持對外存文件的輸入輸出操作。持對外存文件的輸入輸出操作。 要對外存文件進(jìn)行操作,應(yīng)先定義一個(gè)要對外存文件進(jìn)行操作,應(yīng)先定義一個(gè)文件文件流類流類的的對象對象,然后通過文件流對象操作數(shù)據(jù)。,然后通過文件流對象操作數(shù)據(jù)。 可以采用如下方式定義文件流對象:可以采用如下方式定義文件流對象: ofstream outFile;/ 定義輸出文件流對象定義輸出文件流對象outFile ifstream inFile;/ 定義輸入文件流對象定義輸入文件流
36、對象inFile fstream file;/ 定義輸入輸出文件流對象定義輸入輸出文件流對象file7.4.2 文件的打開與關(guān)閉操作文件的打開與關(guān)閉操作 打開文件打開文件就是對文件進(jìn)行讀寫操作之前的就是對文件進(jìn)行讀寫操作之前的準(zhǔn)備工作,主要包括兩個(gè)方面的內(nèi)容:準(zhǔn)備工作,主要包括兩個(gè)方面的內(nèi)容: 為文件流對象和特定的外存文件建立關(guān)聯(lián)。為文件流對象和特定的外存文件建立關(guān)聯(lián)。 指定文件的操作方式。指定文件的操作方式。 文件操作方式用于指定是輸入文件還是輸文件操作方式用于指定是輸入文件還是輸出文件,是出文件,是ASCII碼碼文件還是二進(jìn)制文件等,文件還是二進(jìn)制文件等,文件操作方式是在文件操作方式是在類
37、類ios中定義的中定義的枚舉值枚舉值。表表7.4是常用文件操作方式。是常用文件操作方式。 1. 打開外存文件操作打開外存文件操作表表7.4 常用文件操作方式常用文件操作方式 每一個(gè)打開的每一個(gè)打開的文件流對象文件流對象內(nèi)部都有一個(gè)內(nèi)部都有一個(gè)文件指針文件指針,用于指向當(dāng)前的用于指向當(dāng)前的操作位置操作位置,每次讀寫操作都從文件,每次讀寫操作都從文件指針指向的指針指向的當(dāng)前位置開始當(dāng)前位置開始。當(dāng)讀出一個(gè)字節(jié),指針。當(dāng)讀出一個(gè)字節(jié),指針將將向后移一個(gè)字節(jié)向后移一個(gè)字節(jié)。當(dāng)文件指針移到最后時(shí),這時(shí)。當(dāng)文件指針移到最后時(shí),這時(shí)將遇到文件結(jié)束將遇到文件結(jié)束EOF文件結(jié)束符文件結(jié)束符,此時(shí)流對象的成,此時(shí)
38、流對象的成員函數(shù)員函數(shù)eof()的值為非的值為非0值(表示真),表示文件結(jié)值(表示真),表示文件結(jié)束了。束了。 可以用可以用“位或位或”運(yùn)算符運(yùn)算符“|”對輸入輸出方式進(jìn)行組對輸入輸出方式進(jìn)行組合,例如:合,例如: ios:in | ios:out/ 以輸入輸出方式打開一個(gè)文本文件以輸入輸出方式打開一個(gè)文本文件ios:app | ios:binary/ 以追加方式打開一個(gè)二進(jìn)制文件以追加方式打開一個(gè)二進(jìn)制文件 可以通過如下兩種方式打開文件。可以通過如下兩種方式打開文件。(1)使用文件流類的成員函數(shù))使用文件流類的成員函數(shù)open()打開文件,具體使用方打開文件,具體使用方式為:式為:文件流對象
39、文件流對象.open(磁盤文件名磁盤文件名, 文件操作方式文件操作方式) 例如:例如:ofstream outFile;/ 定義一個(gè)輸出流文件類定義一個(gè)輸出流文件類ofstream對象對象outFileoutFile.open(“my_file.txt”, ios:out); / 以輸出方式打開一個(gè)文件以輸出方式打開一個(gè)文件 外存文件名可以包括路徑,如外存文件名可以包括路徑,如“C: newmy_file.txt”,如沒有指定路徑,則缺省為當(dāng)如沒有指定路徑,則缺省為當(dāng)前文件夾中的文件前文件夾中的文件。(2)在定義)在定義文件流對象文件流對象時(shí)時(shí)指定參數(shù)指定參數(shù),在定義,在定義文件流對象文件流對
40、象時(shí)時(shí)指定參數(shù)指定參數(shù),例如:,例如:ofstream outFile(my_file.txt, ios:out);/ 定義文件流對象定義文件流對象這是一種更常用的形式,其作用與這是一種更常用的形式,其作用與open()函數(shù)相同。函數(shù)相同。 如果打開如果打開操作失敗操作失敗,文件流成員函數(shù),文件流成員函數(shù)fail()返回返回非非0值值(表(表示真),否則返回示真),否則返回0(表示假),(表示假),fail()函數(shù)的使用方式如函數(shù)的使用方式如下:下:文件流對象文件流對象.fail() 可按如下方式測試是否成功打開文件:可按如下方式測試是否成功打開文件:ofstream outFile;/ 定義
41、一個(gè)輸出流文件類定義一個(gè)輸出流文件類ofstream對象對象outFileoutFile.open(my_file.txt, ios:out); / 按輸出方式打開文件按輸出方式打開文件if (outFile.fail() / 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);/ 退出程序退出程序 或或ofstream outFile(my_file.txt, ios:out);/ 定義文件流對象定義文件流對象if (outFile.fail() / 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! ”和輸出運(yùn)算符和輸出運(yùn)算符“”和輸出運(yùn)算符和
42、輸出運(yùn)算符“”來輸入輸出文來輸入輸出文件中的數(shù)據(jù),與用件中的數(shù)據(jù),與用cin,cout和和“”對標(biāo)準(zhǔn)設(shè)備進(jìn)行輸入輸出操作相同。對標(biāo)準(zhǔn)設(shè)備進(jìn)行輸入輸出操作相同。例例7.9 有一個(gè)整型數(shù)組,含有一個(gè)整型數(shù)組,含10個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)文本文件中,個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)文本文件中,然后再從這個(gè)文件中讀數(shù)據(jù)并顯示在屏幕上。然后再從這個(gè)文件中讀數(shù)據(jù)并顯示在屏幕上。int main(void)/ 主函數(shù)主函數(shù)main()int a = 1, 5, 78, 90, 25, 16, 18, 86, 91, 10, n = 10, x;fstream f;/ 定義文件對象定義文件對象f.open(
43、my_file.txt, ios:out);/ 以輸出方式打開文件以輸出方式打開文件if (f.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);/ 退出程序退出程序for (int i = 0; i n; i+)f ai ;/ 輸出數(shù)據(jù)到文件中輸出數(shù)據(jù)到文件中f.close();/ 關(guān)閉文件關(guān)閉文件f.open(my_file.txt, ios:in);/ 以輸入方式打開文件以輸入方式打開文件if (f.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! x;/ 從文件中輸入數(shù)據(jù)到從文件中輸入數(shù)據(jù)到xcout x
44、 ;/ 輸出輸出x到屏幕到屏幕cout endl;/ 換行換行f.close();/ 關(guān)閉文件關(guān)閉文件system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:1 5 78 90 25 16 18 86 91 10 10請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .采用文件流類的采用文件流類的put(),get(),geiline()等成員函數(shù)進(jìn)行字符的輸入輸出等成員函數(shù)進(jìn)行字符的輸入輸出 put(),get(),geiline()等成員函數(shù)也被等成員函數(shù)也被文
45、件文件流類流類所所繼承繼承,因此也可在,因此也可在文件流對象文件流對象中使中使用用這些函數(shù)這些函數(shù)來進(jìn)行字符的來進(jìn)行字符的輸入輸出輸入輸出。 例例7.10 從鍵盤上輸入一行字符存入到一個(gè)文本文件中,然后再從這個(gè)文件從鍵盤上輸入一行字符存入到一個(gè)文本文件中,然后再從這個(gè)文件中輸入各個(gè)字符,并統(tǒng)計(jì)其中的英文字母的個(gè)數(shù)。中輸入各個(gè)字符,并統(tǒng)計(jì)其中的英文字母的個(gè)數(shù)。int main(void)/ 主函數(shù)主函數(shù)main()char ch;/ 字符變量字符變量 ofstream outFile(my_file.txt);/ 定義輸出文件對象定義輸出文件對象if (outFile.fail()/ 打開文件失
46、敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);/ 退出程序退出程序cout 輸入一行文字輸入一行文字: endl;ch = cin.get();/ 輸入一個(gè)字符輸入一個(gè)字符chwhile (ch != n)outFile.put(ch);/ 將將ch輸入到文件中輸入到文件中ch = cin.get();/ 輸入一個(gè)字符輸入一個(gè)字符choutFile.close();/ 關(guān)閉文件關(guān)閉文件例例7.10 從鍵盤上輸入一行字符存入到一個(gè)文本文件中,然后再從這個(gè)文件從鍵盤上輸入一行字符存入到一個(gè)文本文件中,然后再從這個(gè)文件中輸入各個(gè)字符,并統(tǒng)計(jì)其中的英文字母的個(gè)數(shù)。中輸入
47、各個(gè)字符,并統(tǒng)計(jì)其中的英文字母的個(gè)數(shù)。int letters = 0;/ 字母個(gè)數(shù)字母個(gè)數(shù)ifstream inFile(my_file.txt);/ 定義輸入文件對象定義輸入文件對象if (inFile.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! = a & ch = A & ch = Z)letters+;/ 對英文字母進(jìn)行記數(shù)對英文字母進(jìn)行記數(shù)ch = inFile.get();/ 從文件中輸入一字符從文件中輸入一字符chcout 共有英文字母共有英文字母 letters 個(gè)個(gè) endl;inFile.close();/ 關(guān)閉文件關(guān)閉文件程序運(yùn)行時(shí)屏幕輸
48、出參考如下:程序運(yùn)行時(shí)屏幕輸出參考如下:輸入一行文字輸入一行文字:jhjJHJH677&共有英文字母共有英文字母7個(gè)個(gè)請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .例例7.11 編程實(shí)現(xiàn)顯示一個(gè)文本文件的內(nèi)容。編程實(shí)現(xiàn)顯示一個(gè)文本文件的內(nèi)容。int main(void)/ 主函數(shù)主函數(shù)main()char s200, fName20;/ 字符串字符串ifstream f;/ 文件流對象文件流對象cout fName;/ 輸入文件名輸入文件名f.open(fName);/ 打開文件打開文件if (f.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);
49、/ 退出程序退出程序f.getline(s, 200);/ 從文件中輸入一行字符從文件中輸入一行字符while (!f.eof()/ 文件末結(jié)束文件末結(jié)束cout s endl;/ 輸出一行字符輸出一行字符f.getline(s, 200);/ 從文件中輸入一行字符從文件中輸入一行字符f.close();/ 關(guān)閉文件關(guān)閉文件system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)本例程序中,用成員函數(shù)本例程序中,用成員函數(shù)getline()從文件中輸入一行字符,也可用成員函數(shù)從文件中輸入一行字符,也
50、可用成員函數(shù)get()每次從文中輸入一個(gè)字符來實(shí)現(xiàn),具體程序修改如下:每次從文中輸入一個(gè)字符來實(shí)現(xiàn),具體程序修改如下: int main(void)/ 主函數(shù)主函數(shù)main()char ch, fName20;/ 定義變量定義變量ifstream f;/ 文件流對象文件流對象cout fName;/ 輸入文件名輸入文件名f.open(fName);/ 打開文件打開文件if (f.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);/ 退出程序退出程序ch = f.get();/ 從文件中輸入一個(gè)字符從文件中輸入一個(gè)字符while (!f.eo
51、f()/ 文件末結(jié)束文件末結(jié)束cout ch;/ 輸出字符輸出字符ch = f.get();/ 從文件中輸入一個(gè)字符從文件中輸入一個(gè)字符f.close();/ 關(guān)閉文件關(guān)閉文件system(PAUSE); / 輸出系統(tǒng)提示并返回操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)7.4.4 對二進(jìn)制文件的操作對二進(jìn)制文件的操作 二進(jìn)制文件二進(jìn)制文件將按將按內(nèi)存中數(shù)據(jù)存儲形式內(nèi)存中數(shù)據(jù)存儲形式不加不加轉(zhuǎn)換地傳送到外存文件轉(zhuǎn)換地傳送到外存文件 對對二進(jìn)制文件二進(jìn)制文件的操作也是首先需要的操作也是首先需要打開文打開文件件,使用完畢后要,使用完畢后要關(guān)閉
52、文件關(guān)閉文件 用文件流類成員函數(shù)用文件流類成員函數(shù)read()和和write()讀寫二進(jìn)制文件讀寫二進(jìn)制文件 對二進(jìn)制文件的讀寫操作主要用文件流類對二進(jìn)制文件的讀寫操作主要用文件流類成員函數(shù)成員函數(shù)read()和和write()來實(shí)現(xiàn),這兩個(gè)成來實(shí)現(xiàn),這兩個(gè)成員函數(shù)的一般使用格式如下:員函數(shù)的一般使用格式如下: 文件流對象文件流對象.read(字符指針字符指針buffer, 長度長度len);文件流對象文件流對象.write(字符指針字符指針buffer, 長度長度len);其中,字符指針其中,字符指針buffer用于指向內(nèi)存中一塊用于指向內(nèi)存中一塊存儲空間。長度存儲空間。長度len指讀寫的字
53、節(jié)數(shù)指讀寫的字節(jié)數(shù) 例例7.12 有一個(gè)整型數(shù)組,含有一個(gè)整型數(shù)組,含10個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)二進(jìn)制文件中,個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)二進(jìn)制文件中,然后再從這個(gè)文件中讀出這些數(shù)據(jù)并顯示在屏幕上。然后再從這個(gè)文件中讀出這些數(shù)據(jù)并顯示在屏幕上。int main(void)/ 主函數(shù)主函數(shù)main()int a = 1, 5, 78, 90, 25, 16, 18, 86, 91, 10, n = 10, x; fstream f;/ 定義文件對象定義文件對象f.open(my_file.dat, ios:out | ios:binary);/以輸出方式打開文件以輸出方式打開文件if (f
54、.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(1);/ 退出程序退出程序for (int i = 0; i n; i+)f.write(char *)&ai, sizeof(int);/ 寫數(shù)據(jù)到文件中寫數(shù)據(jù)到文件中f.close();/ 關(guān)閉文件關(guān)閉文件f.open(my_file.dat, ios:in | ios:binary);/ 以輸入方式打開文件以輸入方式打開文件if (f.fail()/ 打開文件失敗打開文件失敗cout 打開文件失敗打開文件失敗! endl;exit(2);/ 退出程序退出程序例例7.12 有一個(gè)整型數(shù)組,含
55、有一個(gè)整型數(shù)組,含10個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)二進(jìn)制文件中,個(gè)整數(shù),將這些數(shù)據(jù)存入到一個(gè)二進(jìn)制文件中,然后再從這個(gè)文件中讀出這些數(shù)據(jù)并顯示在屏幕上。然后再從這個(gè)文件中讀出這些數(shù)據(jù)并顯示在屏幕上。f.read(char *)&x, sizeof(int);/ 從文件中讀出數(shù)據(jù)到從文件中讀出數(shù)據(jù)到xwhile (!f.eof()cout x ;/ 輸出輸出x到屏幕到屏幕f.read(char *)&x, sizeof(int); / 從文件中讀出數(shù)據(jù)到從文件中讀出數(shù)據(jù)到xcout endl;/ 換行換行f.close();/ 關(guān)閉文件關(guān)閉文件system(PAUSE); / 輸出系統(tǒng)提示并返回
56、操作系統(tǒng)輸出系統(tǒng)提示并返回操作系統(tǒng)return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時(shí)屏幕輸出如下:程序運(yùn)行時(shí)屏幕輸出如下:1 5 78 90 25 16 18 86 91 10 10請按任意鍵繼續(xù)請按任意鍵繼續(xù). . . 成員函數(shù)成員函數(shù)read()與與write()的第一個(gè)參數(shù)為的第一個(gè)參數(shù)為字符指針字符指針,而本例中寫出與讀出的數(shù)據(jù)都為而本例中寫出與讀出的數(shù)據(jù)都為整數(shù)整數(shù),實(shí)參第一,實(shí)參第一項(xiàng)項(xiàng)實(shí)際為整型指針實(shí)際為整型指針,因此要作,因此要作類型強(qiáng)制轉(zhuǎn)換類型強(qiáng)制轉(zhuǎn)換“(char *)&ai”與與“(char *)&x”。 程序中通過程序中通過for循環(huán)語句向文件寫
57、數(shù)據(jù),循環(huán)語句向文件寫數(shù)據(jù),每個(gè)整數(shù)每個(gè)整數(shù)寫寫一次一次,實(shí)際上可以,實(shí)際上可以一次寫入數(shù)組一次寫入數(shù)組的的所有元素所有元素,將將for循環(huán)的兩行改寫為以下一行:循環(huán)的兩行改寫為以下一行:f.write(char *)&a0, sizeof(a);/ 寫數(shù)據(jù)到文件中寫數(shù)據(jù)到文件中采用這種一次可以寫入一批數(shù)據(jù)的方法更簡捷,采用這種一次可以寫入一批數(shù)據(jù)的方法更簡捷,同時(shí)效率較高同時(shí)效率較高 采用與文件指針有關(guān)的流成員函數(shù)采用與文件指針有關(guān)的流成員函數(shù)來實(shí)現(xiàn)隨機(jī)訪問二進(jìn)制文件來實(shí)現(xiàn)隨機(jī)訪問二進(jìn)制文件 對于二進(jìn)制文件,允許對指針進(jìn)行控制,對于二進(jìn)制文件,允許對指針進(jìn)行控制,使它按用戶的意圖使它按用戶的
58、意圖移動移動到到所需的位置所需的位置,以,以便在便在該位置上進(jìn)行讀寫該位置上進(jìn)行讀寫。 文件流提供一些有關(guān)文件流提供一些有關(guān)文件指針文件指針的的成員函數(shù)成員函數(shù),常用的文件流與文件指針有關(guān)的成員函數(shù)常用的文件流與文件指針有關(guān)的成員函數(shù)如表如表7.5所示。所示。 表表7.5 文件流與文件指針有關(guān)的成員函數(shù)文件流與文件指針有關(guān)的成員函數(shù) 函數(shù)名的最后一個(gè)字母函數(shù)名的最后一個(gè)字母g用于輸入文件的函數(shù)(用于輸入文件的函數(shù)(g是是get的第的第一個(gè)字母),一個(gè)字母),p的是用于輸出文件的函數(shù)(的是用于輸出文件的函數(shù)(p是是put的第一個(gè)的第一個(gè)字母),如果是既可輸入又可輸出的文件,則任意用字母),如果是
59、既可輸入又可輸出的文件,則任意用tellg()與與tellp(),seekg()與與seekp()都是等價(jià)的都是等價(jià)的 函數(shù)參數(shù)中的函數(shù)參數(shù)中的“位置位置”和和“位移量位移量”都是長型整數(shù),以字都是長型整數(shù),以字節(jié)為單位。節(jié)為單位?!皡⒄瘴恢脜⒄瘴恢谩笨梢允窍旅嫒咧唬嚎梢允窍旅嫒咧唬篿os:beg文件開頭文件開頭,這是默認(rèn)值。這是默認(rèn)值。ios:cur當(dāng)前的位置。當(dāng)前的位置。ios:end文件末尾。文件末尾。 它們都是在類它們都是在類ios中定義的枚舉值,例如:中定義的枚舉值,例如:inFile.seekg(80);/ 將輸入文件中的指針移到第將輸入文件中的指針移到第80字節(jié)位置字節(jié)位置inFile.seekg(60, ios:cur);/將輸入文件中的指針從當(dāng)前位置前移將輸入文件中的指針從當(dāng)前位置前移60字節(jié)字節(jié)outFile.seekp(-60, ios:end);/將輸出文件中的指針從文件尾后移將輸出文件中的指針從文件尾后移60字節(jié)字節(jié) 對于對于二進(jìn)制數(shù)據(jù)文件二進(jìn)制數(shù)據(jù)文件,可以利用上面的文件流類的,可以利用上面的文件流類的成員函成員函數(shù)移動指針數(shù)移動指針,隨機(jī)地訪問文件中
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷漆標(biāo)線合同范本
- 出售新舊彩鋼瓦合同范例
- 2024年蕪湖無為市投資促進(jìn)發(fā)展有限公司招聘考試真題
- led電源合同范本
- 公司購銷合同范本
- 2024年清遠(yuǎn)英德市市區(qū)學(xué)校選調(diào)教師(編制)考試真題
- 個(gè)人買賣定金合同范本
- 五人合伙工程合同范本
- 交通類ppp合同范本
- 代簽銷售合同范本
- 如何發(fā)揮好辦公室協(xié)調(diào)、督導(dǎo)、服務(wù)職能
- 部隊(duì)安全教育教案大全
- 交易商協(xié)會非金融企業(yè)債務(wù)融資工具發(fā)行注冊工作介紹
- 《人與環(huán)境》課程教學(xué)大綱
- 班組長管理能力提升培訓(xùn)(PPT96張)課件
- 深圳市城市用地分類表
- 法蘭蝶閥螺栓配用表
- 垃圾中轉(zhuǎn)站施工方案及施工方法
- 內(nèi)蒙古自治區(qū)小額貸款公司試點(diǎn)管理實(shí)施細(xì)則
- 勞務(wù)分包入住生活區(qū)承諾書
- 直系親屬關(guān)系證明(存根)(共1頁)
評論
0/150
提交評論