C++ 之預定義型別 IO 格式控制

發表於2016-10-27

在C語言裡,我們可以通過函式printf和scanf來進行格式化控制。而在C++中仍然包含了前者,但還提供了以下兩種格式控制的方法:(1)使用流成員函式進行格式控制;(2)使用預定義操作符進行格式控制。下面我來一一介紹:

1.流成員函式主要是指ios類(流基類)中的,分別有:

(1).設定狀態標誌流成員函式setf

一般格式:long ios::setf(long flags),呼叫格式:流物件.setf(ios::狀態標誌)

ios類的狀態標誌有:

因為狀態標誌在ios類中定義為列舉值,所以在引用這些值前要加上ios::,如果有多項標誌,中間則用”|”分隔;

(2).清除狀態標誌流成員函式unsetf

一般格式:long ios::unsetf(long flags),呼叫格式:流物件.unsetf(ios::狀態標誌);

(3).設定域寬流成員函式width

一般格式:int ios::width(int n),呼叫格式:流物件.width(n);//注:它只對下一個流輸出有效,輸出完成後,恢復預設值0

(4).設定實數的精度流成員函式precision

一般格式:int ios::precision(int n),呼叫格式:流物件.precision(n);//注:引數n在十進位制小數形式輸出時代表有效數字。在以fixed形式和scientific形式輸出時代表小數位數

(5).填充字元流成員函式fill

一般格式:char ios::fill(char ch),呼叫格式:流物件.fill(ch);//注:當輸出值不滿寬域時用填充符來填充,預設填充符為空格,它與width函式搭配。

下面用示例來驗證:

結果:

2.用ios類中的成員函式來進行IO格式的控制總需要寫一條單獨的語句,而不能直接嵌入到IO語句中去,顯得很不方便。因此C++又提供了一種用操縱符來控制IO的格式。操縱符分為帶參和不帶參的兩種,帶參的定義在標頭檔案iomanip.h中,不帶參的定義在iostream.h中。下面分別是C++中的預定義操作符:

(1)dec:設定整數基數為10,用於輸出和輸入;

(2)hex:設定整數基數為16,用於輸出和輸入;

(3)oct:設定整數基數為8,用於輸出和輸入;

(4)ws:跳過輸入的空格符,用於輸入;

(5)endl:輸出一個換行符並重新整理輸出流,用於輸出;

(6)ends:插入一個空字元null,通常用來結束一個字串,用於輸出;

(7)flush:重新整理一個輸出流,用於輸出;

(8)setbase(n):設定整數的基數為n(可取0或10代表十進位制,8代表八進位制和16代表十六進位制,預設為0),用於輸入和輸出;

(9)setfill(c):設定填充符(預設為空格),用於輸出;

(10)setprecision(n):設定實數精度n,原理和成員函式precision一樣,用於輸出;

(11)setw(n):設定域寬n,用於輸出;

(12)setiosflags(flags):設定指定狀態標誌,多個用”|”分隔,用於輸出和輸入;

(13)resetiosflags(flags):清除指定狀態標誌,多個用”|”分隔,用於輸出和輸入;

操作符setiosflags(flags)和resetiosflags(flags)的部分狀態標誌:

下面用示例來驗證:

結果:

3.除了利用系統預定義的操縱符來進行IO格式的控制外,使用者還可以自定義操縱符來合併程式中頻繁使用的IO寫操作。定義形式如下:

輸出流自定義操縱符

ostream &操縱符名(ostream &s)

{

自定義程式碼

return s;

}

輸入流自定義操縱符

istream &操縱符名(istream &s{

自定義程式碼

return s;

}

返回流物件s很關鍵,否則操縱符就不能用在流的IO操作序列中。

用示例來驗證:

結果:

C++ 之預定義型別 IO 格式控制

相關文章