C 的輸入輸出流

2021-04-26 03:00:52 字數 1429 閱讀 9663

1.面向行的輸入

要獲取一行輸入,有兩種選擇:成員函式get()或getline()。兩個函式都有三個引數:指向儲存結果字元的緩衝區指標、緩衝區大小(不能超過其限度)和知道什麼時候停止讀輸入的終止符。終止符有乙個經常用到的預設值」/n」。兩個函式遇到輸入終止符時,都把零儲存在結果緩衝區裡。

其不同點是什麼呢?get()遇到輸入流的分隔符時就停止,而不從輸入流中提取分隔符。如果用同樣的分隔符再呼叫一次get()函式,它會立即返回而不帶任何輸入。getline()與其相反,它從輸入流中提取分隔符,但仍沒有把它儲存在結果緩衝區裡。

總之,當我們在處理文字檔案時,無論什麼時候讀出一行,都會想到用getline()。

2.輸入輸出流緩衝

每乙個輸入輸出流都包含乙個指標,指向某種streambuf(這依賴於它是否處理標準i\o、檔案、記憶體等等)。我們可以直接訪問streambuf。

當前,我們要知道的最重要的事是:每個輸入輸出流物件包含乙個指向streambuf的指標,而且,如果需要呼叫的話,streambuf有我們可以呼叫的成員函式。

為了允許我們訪問streambuf,每個流物件有乙個叫做rdbuf()的成員函式,這個函式返回指向物件的streambuf的指標。這樣,我們可以為下層的streambuf呼叫任何成員函式。然而,對streambuf指標所做的最有興趣的事之一是:使用「<<」操作符將其與另乙個輸入輸出流聯結。這使我們的物件中的所有位元組流進「<<」左邊的物件中。這意味著,如果把乙個輸入輸出流的所有位元組移到另乙個輸入輸出流,我們不必做讀入它們的乙個位元組或一行這樣單調的工作。

3.在輸入輸出流中查詢

在某些情況下,可能需要移動這個流的位置,可以用兩種方式處理:第一種方式是在流裡絕對定位,叫流定位(streampos);第二種方式像標準c庫函式fseek()那樣做,從檔案開始、結尾或當前位置移動給定數目的位元組。

流定位(streampos)方法要求先呼叫「tell」函式:對乙個輸出流用tellp()函式,對乙個輸入流用tellg()函式。(」p「指」放指標「,「g」指「取指標」)。要返回到流中的那個位置時,這個函式返回乙個streampos,我們以後可以在用於輸出流的seekp()函式或用於輸入流的seekg()函式的單引數版本裡使用這個streampos。

另乙個方法是相對查詢,使用seekp()和seekg()的過載版本。第乙個引數是要移動的位元組數,它可以是正的或負的。第二個引數是查詢方向:

ios::beg 從流的開始位置

ios::cur 從流的當前位置

ios::end 從流的末尾位置

建立讀/寫檔案

下面的**首先建立乙個有標誌的ifstream,它既是乙個輸入檔案又是乙個輸出檔案,編譯器不允許我們向ifstream寫,因此,需要建立具有基本流緩衝區的輸出流(ostream):

ifstream in(「filename」, ios::in | ios::out);

ostream out(in.buf());

C 輸入 輸出流

低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。不帶引數值成員函式get 從指定的流中讀取乙個字元 即使是空格 並返回該字元作...

C 輸入輸出流

一 c 流的概念 在c 語言中,資料的輸入和輸出 簡寫為i o 包括對標準輸入裝置鍵盤和標準輸 出裝置顯示器 對在外存磁碟上的檔案和對記憶體中指定的字串儲存空間 當然可 用該空間儲存任何資訊 進行輸入輸出這三個方面。對標準輸入裝置和標準輸出設 備的輸入輸出簡稱為標準i o,對在外存磁碟上檔案的輸入輸...

C 輸入 輸出流

一 流低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。二 成員函式get和getline 不帶引數值成員函式get 從指定的流...