程式設計思想第二版第二卷筆記3 輸入輸出流

2021-08-23 14:48:58 字數 3613 閱讀 4851

輸入輸出流的靈活、安全、易用是使它替代c

風格的輸入輸出函式的主要原因。

上圖是輸出輸出流的簡化類圖,可以看到,各種各樣的輸入輸出類都派生自同乙個類。

輸入輸出流最基本的兩個運算子就是插入號(inserter

)<<

和提取號(extractor

)>>

基本用法:

cout <<

目標;//

輸出目標,即將資訊插入目標

cin >>

目標;//

讀取目標,即從外界提取資訊

行操作函式: 

成員函式get( )

和getline( )

標頭檔案中定義的全域性函式getline( )

流狀態badbit

產生了某種致命(可能是硬體)錯誤。此時不應當考慮使用該流。

eofbit

輸入結束(可能是讀到了流的結束位置,也可能是使用者用ctrl+z

或ctrl+d

關閉了控制台流。

failbit

輸入輸出操作失敗,這種情況通常是資料不可用造成的(例如在試圖讀取數字時卻讀到了字元)。這樣的流不可以使用。當輸入結束時,也會設定failbit

標誌。

goodbit

一切正常,沒有任何錯誤。輸入也還沒有結束。

檔案流:和其他的流一樣,都有<<

>

兩個運算子,用法是一樣的,只不過操作物件是檔案。

檔案流模式:

ios::in

以讀取方式開啟檔案。使用這個模式開啟檔案可以防止對已有檔案的誤寫操作。

ios::out

、ios::ate

或ios::in

,則標誌ios::trunc

預設是為真的。

以追加方式開啟檔案(只模式下只可以向檔案追加內容)。

ios::ate

開啟檔案並把操作指標移動到檔案末尾(可以是開啟檔案,也可以是寫入檔案)

ios::trunc

如果舊檔案存在,則修改舊檔案。

ios::binary

以二進行模式開啟乙個檔案。預設是文字模式。

輸入輸出流快取(iostream buffering

),如上圖,是為使用者提供的操作二進位製流內容的類。

輸入輸出流的內部查詢方向:

ios::beg

從流的開頭。

ios::cur

從當前位置。

ios::end

從流的結尾。

字串輸入輸出流格式控制:

ios::skipws

忽略空格(輸入時預設是開啟的)

ios::showbase

這裡指的是輸出時顯示合法值的進製字首(比如,可以設定為十進行、八進位制、十六進製制等)。此標誌開啟時,輸入流也可以辨識進製字首。

ios::showpoint

顯示浮點數的小數點及精確度(也就是小數點後面有幾個零)

ios::uppercase

將十六進行中的a-f

以及科學計數中的e

以大寫形式顯示。

ios::showpos

顯示正數的「+

」號。

ios::unitbuf

「單位快取」(「unit buffering.」

)。每次插入都馬上清空快取。

進行操作控制:

ios::dec

將整型資料按十進行格式化(預設進製——顯示值時不帶字首)。

ios::hex

將整型資料按十六進行格式化。

ios::oct

將整型資料按八進行格式化。

ios::scientific

以科學計數方式顯示浮點型資料。精確位表明小數點後精確的位數。

ios::fixed

以固定格式顯示浮點型資料。精確位表明小數點後精確的位數。

「自動浮點格式」(沒有設定任何浮點格式時)精確位表明所有的有效數字。

ios::left

左對齊數值,在右側不足位填充字元。

ios::right

左對齊數值,在右側不足位填充字元。這是預設的對齊方式。

ios::internal

在任意標誌或數制符後,數值之前填入字元。

function

effect

int ios::width( )

返回當前寬度。預設值是零。可以用於輸入與輸出。

int ios::width(int n)

設定寬度,返回設定前的寬度。

int ios::fill( )

返回當前填充字元。預設是空格。

int ios::fill(int n)

設定填充字元,返回設定前的填充字元。

int ios::precision( )

返回當前浮點數精度。預設是6。

int ios::precision(int n)

設定浮點精度,返回設定前精度。

控制操作符(manipulators

),c++

提供了豐富的控制操作符(帶引數和不帶引數的),且還可以通過如下方式自定義:

//: c04:nl.cpp

// creating a manipulator.

#include

using namespace std;

ostream& nl(ostream& os)

int main() ///:~

//: c04:effector.cpp

// jerry schwarz's "effectors."

#include

#include // for max()

#include

#include

using namespace std;

// put out a prefix of a string:

class fixw

friend ostream& operator<

// print a number in binary:

typedef unsigned long ulong;

class bin

friend ostream& operator<

return os; }

};

int main()

ostringstream xs, ys;

xs << bin(0xcafebabeul);

assert(xs.str() ==

"1100""1010""1111""1110""1011""1010""1011""1110");

ys << bin(0x76543210ul);

assert(ys.str() ==

"0111""0110""0101""0100""0011""0010""0001""0000");

} ///:~

寬字元,因為有些編譯器不支援,不詳述了,用到的自己查吧。

本地化,可以使用locales.

程式設計思想第二卷(實用程式設計技術)摘要

在c 程式設計思想的第二卷中介紹了很多更深入的c 特性,這是現代c 程式設計的精髓 模板 一般類的宣告和定義都在 和 兩種檔案中,主要是怕連線時的多重定義,但是對於模板可以放心的將他們都放在 檔案中,因為template後面的東西編譯器不會為其分配空間,知道有乙個模板例項告知。如果不適用內斂的方式,...

GNU Linux程式設計指南 第二版

本書全面而深入地介紹了gnu linux程式設計。首先介紹了在linux上程式設計必備的程式設計工具,然後在庫函式 系統呼叫以及核心上闡述linux程式設計知識,並專門講述了包括tcp ip udp以及多播套介面在內的網路程式設計知識 圖形介面也是本書的重點內容,本書著重講述了文字形式的圖形介面庫n...

python核心程式設計第二版第二章學習筆記

一.python直譯器 在所有的互動示例中,你會看到python 的 主提示符 和次提示符 主提示符是直譯器告訴你它在 等待你 輸入下乙個語句 次提示符告訴你直譯器正在 等待你輸入當前語句的其它部分。核心筆記 在互動式直譯器中顯示變數的值 通常當你想看變數內容時,你會在 中使用print 語句輸出。...