為什麼80%的碼農都做不了架構師?>>>
說到流操作,則與程式的輸入輸出(簡記為i/o)有關,本文講述c++的一些i/o操作。本文所用的一些操作雖然都是基於標準輸入輸出(如螢幕和鍵盤到程式的輸出和輸入),但是這些規則對於接下來的檔案操作也是有用的。c++ i/o 區分流的種類,特定種類的i/o只能處理特定資料型別的流,稱作種類安全流機制(type-safe io)(chap 13 13.1 p.g.416)
c++含有變數wchar_t,用來表示unicode字元;char16_t和char32_t是分別限定unicode大小的字元變數種類。(chap 13 13.2 p.g.418)
幾個常用的有關流操作的標頭檔案: :定義基本i/o物件,例如cin, cout, cerr(非緩衝流,立即被輸出到輸出裝置)和clog :提供格式化流操作 :用於檔案處理的流操作(本章不涉及,在檔案操作時會再提)
在流檔案中,存在如下定義:
//在流程式設計中一般直接使用typedef定義的名稱
typedef basic_istreamistream;
typedef basic_ostreamostream;
typedef basic_iostreamiostream;
關於typedef參考:
c++流結構圖示如下:
void *用於輸出字元指標的位址
cout.put('a').put('\n').put('b');
void *被隱式呼叫用於判定輸入是否結束:
此時,void *往往被cin.get()方法隱式呼叫,以判斷輸入是否完成。例如:
//eof為cin.get()隱式呼叫void *之後檔案結束的返回值
對於非格式化流,c++使用read函式向程式讀入資料,使用write函式向輸出(可能是螢幕或硬碟)寫出資料,使用gcount統計上乙個輸入流的字元長度(輸入不滿char 大小時按實際輸入長度確定)。舉例如下:
常用流函式:
常用流操作常量一覽:
示例程式:
輸出解釋:cin預設情況相當於cin.get(),碰到界定符為空格時停止從流中讀入資料,並將空格符號作為下一次讀入的第乙個字元。由於單詞member前五個字母以及它之前乙個空格正好構成6個字元,達到了輸入流限制的最大長度,因此字母r作為下乙個輸入流的起始被讀入。同理可分析function的讀入情況。
c++中,可以通過在程式執行前儲存程式當前流操作符號狀態,使用完畢後恢復的方式來避免粘性流操作符對於之後程式產生的可能影響,具體程式如下:
//儲存當前流操作符狀態:
ios_base::fmtflags originalformat = cout.flags();
//省略中間部分可能改變流操作符狀態的部分
//......
//恢復到原來的流操作符狀態:
cout.flags(originalformat);
在c++中,標準輸入流往往總是在其相應輸出流之後出現,目的是便於向使用者提供互動資訊後再採納使用者輸入。對於其他一般的流,則可以通過
input.tie(&output);
的方式指定相應流執行的順序。取消這樣的順序限定,可以使用
input.tie(0);
實現。 C 檔案流操作
include stdafx.h include include include include include using namespace std void writecharsettofile const string filename void outputfile const strin...
C 檔案流操作
c 的檔案流本質是利用了乙個buffer中間層,有點類似標準輸出和標準輸入一樣。需要包含的標頭檔案 fstream.h 需要的命名空間 std fstream提供了三個類,用來實現c 對檔案的操作,以下對其做個簡要概述。1.ifstream類 2.ofstream類 3.fstream類 支援的檔案...
c 流常見操作
記下輸入輸出流 檔案流 字串流的常見操作。vectorvclines wstring instr while getline wcin,instr 需要引入 include 預設控制台是ansi編碼,要輸出對應寬字元,需要制定locale來保證輸出時完成對應的編碼轉換,引入 include 並在開始...