C 流之標準I O流

2021-07-04 10:35:15 字數 3070 閱讀 4959

標準i/o流是指對標準輸入裝置(鍵盤、滑鼠等)和標準輸出裝置(顯示器、印表機等)進行輸入輸出的過程。

在根基類ios類中定義了3個使用者會經常使用的列舉型別,由於他們是在公用成員部分定義的,所以其中的每個列舉型別常量在加上ios::字首後都可以為本類成員函式和所有外部函式訪問。

enum ;
以下是上述列舉常量的簡要說明:(注:我用易理解的白話說明,易於理解,但是可能存在片面性,請參照英文解釋)

其中每乙個列舉常量定義了一種檔案開啟的方式,將在後面的檔案i/o流中作詳細介紹。

enum seek_dir ;
其中每乙個列舉常量對應了一種檔案指標的定位操作上,將在後面的檔案i/o流中作詳細介紹。

int bad();    操作出錯時返回非零值

int eof(); 讀取到流中最後檔案結束時返回非零值

int fail(); 操作失敗時返回非零值

void clear(); 清除bad、eof、fail所對應的標誌狀態,使之恢復為正常狀態值0,使good標誌狀態恢復為1

char fill(); 返回當前使用的填充位元組

char fill(char c); 重新設定流中用於輸出資料的填充字元為c的值,返回此前的填充字元。系統預設值填充字元為空格

long flags(); 返回當前用於i/o控制的格式狀態字

long flags(long f); 重新設定格式狀態字為f的值,返回此前的格式狀態字

int good(); 操作正常時返回非零值,當操作出錯、失敗和讀到檔案結束符時均為不正常,則返回0

int precision(); 返回浮點數輸出精度,即輸出的有效數字的位數

int precision(int n); 設定浮點數的輸出精度為n,返回此前的輸出精度,系統預設為6

int rdstate();操作正常時返回0,否則返回非0值,它與good()的返回值正好相反

int setf(long f); 根據引數f設定相應的格式化標誌,返回此前的設定。其中引數f是之前提到無名列舉型別中的常量

int unsetf(long f); 根據引數f清楚相應的格式化標誌,返回此前的設定。

int width(); 返回當前的輸出域寬

以下就是用乙個小例子對上面提到的成員函式作乙個展示:

#include using namespace std;

int main()

輸出:

我們會發現怎麼設定了八進位制格式沒有效果呢?原因在於setf有兩個過載版本。

第乙個版本 fmtflags setf(fmtflags fmtfl);適用於boolalpha, showbase, showpoint, showpos, skipws, unitbuf和uppercase標誌

第二個版本 fmtflags setf(fmtflags fmtfl, fmtflags mask);適用於left, right, internal, dec, oct, hex, scientific, fixed,並要指定掩碼:adjustfield,basefield 或 floatfield

#include using namespace std;

int main()

輸出:

我們可以發現,通過新增ios::basefield解決了示例一的問題,但是發現好像第三次的輸出並沒有按照設定的十六進製制進行輸出。原因在於我們在設定新的輸出方式之前,一定要使得其恢復預設設定,即要取消之前的設定,見示例三。

#include using namespace std;

int main()

輸出:

通過第四部分的介紹,我們可以利用ios類中的一些成員函式對輸入輸出的格式進行各種設定,但是每次使用時候都要先取消之前的設定,然後再重新設定,比較繁瑣,有沒有更加簡潔的方式呢?答案當然是有的,那就是系統標頭檔案iomanip中提供的控制識別符號。使用它們可以不用呼叫成員函式,只需要把他們作為插入或提取運演算法的運算物件即可。

dec    轉換為十進位制整數

oct 轉換為八進位制整數

hex 轉換為十六進製制整數

ws 從輸入劉總一次讀取所有連續的空白符

endl 輸出換行符'\n'並重新整理流

ends 輸出乙個控制符'\0'

flush 重新整理乙個輸出流

setiosflags(long f) 設定f所對應的格式化標誌

resetiosflags(long f) 清除f所對應的格式化標誌

setfill(int c) 設定填充字元為ascii碼為c的字元

setprecision(int n) 設定浮點數的輸出精度為n

setw(int w) 設定下乙個資料值的輸出域寬為w

#include #include using namespace std;

int main()

結果和示例三一樣

標準I O庫之定位流

有三種方法定位標準i o流。1 ftell和fseek函式。這兩個函式自v7以來就存在了,但是它們都假定檔案的位置可以存放在乙個長整型中。2 ftello和fseeko函式。single unix specification引入了這兩個函式,可以使檔案偏移量不必一定使用長整型。它們使用off t資料...

C 流與標準IO庫

流 資料在計算機裝置和記憶體之間移動,其基本單位為字元,故將其形象地稱為流。中把輸入輸出流定義為類,這裡的輸入 輸出是針對記憶體而言的。流類的物件稱為流物件。每個流物件在記憶體中有自己的緩衝區用於暫存資料。流物件不能複製或賦值,但可以將其引用或指向流物件的指標作為函式的引數或者返回值。第四版 中主要...

IO流之字元流

字元流是為了方便我們讀寫文字檔案,在換句話說,字元流只能讀寫文字檔案,其他型別的檔案讀寫不了。outputstreamwriter 是字元流通向位元組流的橋梁 可使用指定的 charset 將要寫入流中的字元編碼成位元組。它使用的字符集可以由名稱指定或顯式給定,否則將接受平台預設的字符集。使用編碼表...