標準i/o流是指對標準輸入裝置(鍵盤、滑鼠等)和標準輸出裝置(顯示器、印表機等)進行輸入輸出的過程。在根基類ios類中定義了3個使用者會經常使用的列舉型別,由於他們是在公用成員部分定義的,所以其中的每個列舉型別常量在加上ios::字首後都可以為本類成員函式和所有外部函式訪問。以下是上述列舉常量的簡要說明:(注:我用易理解的白話說明,易於理解,但是可能存在片面性,請參照英文解釋)enum ;
其中每乙個列舉常量定義了一種檔案開啟的方式,將在後面的檔案i/o流中作詳細介紹。其中每乙個列舉常量對應了一種檔案指標的定位操作上,將在後面的檔案i/o流中作詳細介紹。enum seek_dir ;
以下就是用乙個小例子對上面提到的成員函式作乙個展示: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 將要寫入流中的字元編碼成位元組。它使用的字符集可以由名稱指定或顯式給定,否則將接受平台預設的字符集。使用編碼表...