cout格式化輸出

2021-08-07 17:23:57 字數 2600 閱讀 6135

在c語言中,我們一般用printf()函式來進行輸出,通過輸出字串中的格式說明符(如%4.2d)可以很容易地格式化輸出。而在c++中,為簡便起見,往往不指定輸出的格式,由系統根據資料的型別採取預設的格式,但有時也需要資料按我們指定的格式輸出,比如以十六進製制的形式輸出乙個整數等。有兩種方法可以達到格式化輸出的目的,一種是使用流物件的有關成員函式,還有一種是使用控制符方法,這兩種方法殊途同歸,它們的原理和起到的作用都是一樣的,只不過使用形式不一樣。

表1 用於控輸出格式的流成員函式及控制符

流成員函式

作用相同的控制符

作用precision(n)

setprecision(n)

設定實數的精度為n位

width(n)

setw(n)

設定字段寬度為n位

fill(c)

setfill(c)

設定填充宇符c

setf(ios::state)

setiosflags(ios::state)

設定輸出格式狀態,括號中應給出格式狀態,內容與控制符setiosflags括號中的內容相同,如表2所示

unsetf(ios::state)

resetioflags(ios::state)

終止已設定的輸出格式狀態,在括號中應指定內容

表2 設定格式狀態的格式標誌

格式標誌

作用ios::left

輸出資料在本域寬範圍內向左對齊

ios::right

輸出資料在本域寬範圍內向右對齊

ios::internal

數值的符號位在域寬內左對齊,數值右對齊,中間由填充字元填充

ios::dec

設定整數的基數為10

ios::oct

設定整數的基數為8

ios::hex

設定整數的基數為16

ios::showbase

強制輸出整數的基數(八進位制數以0打頭,十六進製制數以0x打頭)

ios::showpoint

強制輸出浮點數的小點和尾數0

ios::uppercase

在以科學記數法格式e和以十六進製制輸出字母時以大寫表示

ios::showpos

對正數顯示「+」號

ios::scientific

浮點數以科學記數法格式輸出

ios::fixed

浮點數以定點格式(小數形式)輸出

ios::boolalpha

以「true」/「false」的形式輸出布林值

ios::unitbuf

每次輸出之後重新整理所有的流

ios::stdio

每次輸出之後清除stdout, stderr

我們可以使用用流物件的成員函式來控制輸出格式。比如我們想要以十六進製制來輸出乙個整形,設定字段寬度為8位,並用』*』來填充空白的話,可以使用以下**:

#include 

using

namespace

std;

int main()

輸出為:

******1f

#include 

#include //不要忘記包含此標頭檔案

using

namespace

std;

int main()

注意:

enum _ios_fmtflags 

;

在上述兩種方法中,要設定格式標誌位都需要呼叫函式(setf和setiosflags),比較麻煩,所幸c++還有一組關於格式標誌的函式,可以直接在輸入輸出流中使用,比如要實現之前的輸出格式我們可以這麼寫:

#include 

#include

using

namespace

std;

int main()

上面的hex就是這樣的乙個函式,除了hex,表2中的所有格式標誌都通過這種方法設定,如果要終止只需標誌名前加個「no」就可以,比如showpos和noshowpos(表2中前六項沒有no版本)。

另外可以注意到,這裡用hex設定十六進製制的時候並不用像之前一樣先終止十進位制,這是為什麼呢?先來看看hex的函式定義:

inline ios_base&

hex(ios_base& __base)

可以看到hex其實是呼叫了setf函式,但這裡的setf跟我們上面用到的setf函式不同,這是過載之後有兩個形參的setf函式,其定義如下:

fmtflags

setf(fmtflags __fmtfl, fmtflags __mask)

可以看到這裡setf先將mask所對應的位都置0,再將要設定的位置1。具體到hex函式,它是將_s_basefield(_s_dec | _s_oct | _s_hex)都先置0,再將_s_hex位置1。有了這個setf函式,我們在使用hex的時候就不需要先終止dec了,可以直接使用hex。

cout格式化輸出

在使用setf等庫函式時使用 在使用流操縱運算元時使用 using namespace std 以下所有的setf 都有對應的unsetf 用於取消設定 所有的setiosflags 可以用resetiosflags 取消 標誌位fmtflags的命名空間可以使用ios base 或者ios int...

cout格式化輸出

需要引入的標頭檔案 include在使用流操縱運算元時使用 int laneri 12345 double lanerd 56789 1 設定整數進製輸出 過載1 fmtflags ios base setf fmtflags mask 過載2 fmtflags ios base setf fmtf...

cout 格式化輸出

一直習慣於c語言的printf函式來列印,突然有一天要用cout來列印,發現有點不適應。原來cout也是有格式化輸出的。首先要引入標頭檔案 include 在使用setf等庫函式時使用 include 在使用流操縱運算元時使用 cout可以用setw來設定字串的長度,不足的話,可以用setfill來...