iostream 是 C 中用於資料的流式輸入與輸出的標頭檔案，屬於 C 標準程式庫的一部分。ISOIEC 148822003 Programming Languages C libstringstreams1 iostream 為 InputOutput Stream 的縮寫，即是輸入 輸出流。「流」是一連串從 IO 裝置讀寫的字元。 概述 流輸入輸出庫中的大部分類都是模板類，可以適用於不同的字元型別或操作函式（如字元比較）。常用的一些字元型別的流輸入輸出已經用 typedef 定義了相應的模板特化例項。 例如，basic_fstreamCharTTraits 是檔案流輸入輸出的實現的模板類。它的一個特化例項：fstream 是 basic_fstreamcharchar_traitschar 的類型別名，換句話說，這是 basic_fstream 的字元型別為 char 使用預設字元操作集的特化例項。 流輸入輸出庫中的類可分為兩 zhcn 類；zhtw 類。一是定義了介面的抽象，適用於任何流型別，無論是檔案流、記憶體快取區流或者網路 socket 流。二是對具體資料來源與資料匯（sink）的流的實現。C 標準庫僅實現了檔案流與記憶體緩衝區流。 流輸入輸出庫中的類依據是否實現底層或高層操作可分為兩類。實現了底層操作的類稱作流緩衝區（stream buffer），處理沒有任何格式化功能的字元。這些類極少被程式設計者直接使用。實現高層操作的類稱作流，並提供了不同的格式化能力，是構建於流緩衝區之上的。 下表列出了流輸入輸出庫的所有類的分 zhcn 類；zhtw 類： Class 解釋 Typedefs Stream buffers 底層功能 Stream buffers 底層功能 Stream buffers 底層功能 basic_streambuf 提供了底層的輸入輸出介面，被具體的資料來源與匯實現。罕用 streambuf 字元型別 char wstreambuf 字元型別 wchar_t basic_filebuf 提供了檔案流的底層的輸入輸出介面，被具體的資料來源與匯實現。罕用 filebuf 字元型別 char wfilebuf 字元型別 wchar_t basic_stringbuf 提供了字元檔案流的底層的輸入輸出介面，被具體的資料來源與匯實現。罕用 stringbuf 字元型別 char wstringbuf 字元型別 wchar_t Support classes Support classes Support classes ios_base 管理格式化資訊與異常狀態 basic_ios 管理流緩衝區 ios 字元型別 char wios 字元型別 wchar_t Input streams buffers 高層功能 Input streams buffers 高層功能 Input streams buffers 高層功能 basic_istream 包裝一個抽象流緩衝區並提供高層輸入介面，如格式化能力 istream 字元型別 char wistream 字元型別 wchar_t basic_ifstream 包裝一個檔案流緩衝區並提供高層輸入介面，如開啟關閉流 ifstream 字元型別 char wifstream 字元型別 wchar_t basic_istringstream 包裝一個字串流緩衝區並提供高層輸入介面，如訪問基礎字串 istringstream 字元型別 char wistringstream 字元型別 wchar_t Output streams buffers 高層功能 Output streams buffers 高層功能 Output streams buffers 高層功能 basic_ostream 包裝一個抽象流緩衝區並提供高層輸出介面，如格式化能力 ostream 字元型別 char wostream 字元型別 wchar_t basic_ofstream 包裝一個檔案流緩衝區並提供高層輸出介面，如開啟關閉流 ofstream 字元型別 char wofstream 字元型別 wchar_t basic_ostringstream 包裝一個字串流緩衝區並提供高層輸出介面，如訪問基礎字串 ostringstream 字元型別 char wostringstream 字元型別 wchar_t Inputoutput streams buffers 高層功能 Inputoutput streams buffers 高層功能 Inputoutput streams buffers 高層功能 basic_iostream 包裝一個抽象流緩衝區並提供高層輸入輸出介面，如格式化能力 iostream 字元型別 char wiostream 字元型別 wchar_t basic_fstream 包裝一個檔案流輸入輸出緩衝區，並提供高層輸入輸出介面，如開啟關閉檔案 fstream 字元型別 char wfstream 字元型別 wchar_t basic_stringstream 包裝一個字串流輸入輸出緩衝區，並提供高層輸入輸出介面，如訪問基礎字串 stringstream 字元型別 char wstringstream 字元型別 wchar_t 標頭檔案 ios 包含著 ios_base 與 basic_ios 的類的定義，負責資訊格式化與關聯的流緩衝區。 istream 包含了 basic_istream 類模板定義，實現了格式化輸入 ostream 包含了 basic_ostream 類模板定義，實現了格式化輸出 iostream 包含了 basic_iostream 類模板定義，實現格式化輸入輸出 fstream 包含了 basic_ifstream basic_ofstream 與 basic_fstream 類模板定義，實現格式化檔案流的格式化輸入、輸出 sstream 包含了 basic_istringstream basic_ostringstream 與 basic_stringstream 類模板定義，實現格式化字串流的輸入輸出 iomanip 包含了格式化 manipulator iosfwd 包含了所有的流輸入輸出庫的前向宣告（forward declaration） 支援類 ios_base 與 basic_ios 是兩個類處理底層位元流。ios_base 儲存格式化資訊與流的狀態。basic_ios 管理關聯的流緩衝區。basic_ios 通常以特化例項 ios 與 wios 出現。basic_ios 與 ios_base 很少被程式設計師直接使用。通常，它們的功能透過其它派生的類，如 iostream。 Typedefs 名字 描述 ios basic_ios 的 char 型別特化 wios basic_ios 的 wchar_t 型別特化 streamoff 支援內部操作 streampos 儲存緩衝器指標或檔案指標的當前位置 wstreampos 儲存寬字元版的緩衝器指標或檔案指標的當前位置 streamsize 流的尺寸 格式化操縱符（manipulator） 名字 描述 boolalpha noboolalpha 指示流中的 bool 型別變數是否以 true 或 false，還是以 0 或 1 形式出現 skipws noskipws 指示輸入操作時空白符是否被跳過 showbase noshowbase 指示數的基數記數標誌是否顯示 showpoint noshowpoint 指示當浮點數小數部分為 0 時，是否顯示小數部分 showpos noshowpos 指示對於正數是否顯示 符號 unitbuf nounitbuf 指示輸出是否被緩衝 uppercase nouppercase 指示在 16 進位制整數或浮點數輸出時是否使用大寫字元 left rightinternal 指出對齊方式 dec oct hex 指示顯示整數時的記數法 fixed scientific hexfloat C11 defaultfloat C11 指示浮點數顯示時的記數法 輸入 輸出流 iostream 標頭檔案定義了輸入輸出流物件：cin cout cerr clog 分別為標準輸入、輸出、錯誤（無緩衝）、簿記（有緩衝）的流物件。都屬於 std 名字空間。 ostream 物件 cout 屬於 ostream 型別，過載了左移位算符。cout 左移位算符的運算結果為 cout 自身，這使得連續的左位移操作輸出一串資料成為可能。cerr 與 clog 物件是 ostream 型別。 istream 物件 cin 是 istream 型別，過載了右位移算符。 輸入裝置是按照行來把資料移入流輸入緩衝區。也就是說，鍵盤輸入資料時，只有按了換行鍵，這一行資料才進入緩衝區，可以讀取。 表示式 cin ival 從標準輸入讀入一個值。有兩種情況會使一個 istream 物件的 bool 轉型為 false：讀到 EOF（檔案結束標誌）或遇到一個無效的值（輸入流進入 fail 狀態）。可以用該 istream 物件的成員函式 good 來測試，或者直接 bool cin 來測試。 istream 物件的 bool 轉型為 false 的情況下，此後的所有讀入動作都是無操作（nop）。直到呼叫 istream 物件的成員函式 clear 來清除該物件的內部狀態。 預設情況下，輸入運算子丟棄空白符、空格符、製表符、換行符以及回車。如果希望讀入上述字元，或讀入原始的輸入資料，一種方法是使用 istream 的 get 成員函式來讀取一個字元，另一種方法是使用 istream 的 getline 成員函式來讀取多個字元。istream 的 read char addr streamsize size 函式從輸入流中提取 size 個連續的位元組，並將其放在地址從 addr 開始的記憶體中。istream 成員函式 gcount 返回由最後的 get 、getline 、read 呼叫實際提取的字元數。 輸入流有三個函式來測試流狀態：即 bad fail 和 eof 。ignore 用來拋掉制定個數的緩衝區中的位元組。 其它的 istream 成員函式：putback char c 將字元放回 iostream；unget 往回重置 下一個 istream 項；peek 返回下一個字元或 EOF，但不要提取出來 。 輸出格式化 方法（函式） width int x 下一個輸出的最小字元數目 fill char x 填充字元 precision int x 設定浮點數的有效數字的位數 操縱符（manipulator） 操縱符（manipulator）是使用 或 運算元修改流的物件 endl end line 流中插入換行符並重新整理（flush）流的輸出緩衝 ends end string 向流中插入空字元（null character）並重新整理（flush）流的輸出緩衝 flush 強迫流的輸出緩衝寫出到輸出裝置 ws 導致輸入流吃掉空白（whitespace） showpoint 指示流要顯示小數點與一些數字 0 標頭檔案中 iomanip 還定義了一些 manipulators。 批評 某些環境下並不提供共享版本的 C 庫。導致程式要靜態編譯入 C 標準庫，使得程式的尺寸變大。 示例 使用 C 寫成的 Hello World 程式如下所示 include iostream using namespace std int main cout Hello world endl return 0 在這段程式碼中，檔案 iostream 中聲明瞭程式所要輸入和輸出操作的有關資訊。 下述程式碼建立一個檔案 filetxt 並寫入文字 Hello World： include fstream int main stdofstream filecan be merged to stdofstream file filetxt fileopen filetxt file Hello worldn fileclose is not necessary because the destructor closes the open file by default return 0 參考文獻 外部連結 C reference for inputoutput library Apache C Standard Library Iostreams Comprehensive tutorial on formatting output in C Apache C Standard Library Iostreams CategoryC 標準函式庫