格式化輸出 part1 標準控制符

2022-04-07 00:09:43 字數 2719 閱讀 7516

/*

設定輸出字元的寬度

width(int)是iostream類的成員函式,可以通過cout物件來呼叫,即cout.width(int)

注:1.width(int)只影響將要顯示的乙個物件,之後字段寬度會自動恢復為預設值

2.如果設定的字段寬度小於要輸出的字元的寬度,則字元全部輸出

3.如果設定的字段寬度大於要輸出的字元的寬度,則字元右對齊輸出,多餘部分用空格填充

設定填充字段

cout.fill(char)可以設定填充字段

注:fill(char)會一直生效,直至重新設定

設定浮點數的顯示精度

cout.precision(int)可以設定浮點數的顯示精度(不包括小數點)

注:1.如果設定的精度大於浮點數的位數,如果浮點數能根據ieee754精確表示,則補零;如果浮點數不能精確表示,則盡量接近

2.如果設定的精度小於浮點數的位數,採用科學計數法表示

3.precision(int)單獨使用,表示設定有效位數;與fixed或者scientific連用,表示設定小數字的精度

4.precision(int)會一直生效 

setf()函式

setf()函式原型如下:

fmtflags setf(fmtflags)

fmtflags setf(fmtflags,fmtflags)

先看第乙個原型。

其中fmtflags是一種標誌型別,或者說標誌位。

ios_base類的保護資料成員是乙個15位的二進位制數字,或者說是15個標誌位,這15個標誌位與ios類的15個列舉型常量一一對應,對應關係如下:

boolalpha    fixed    scientific    hex    oct    dec    internal    right    left    showpos    showpoint    showbase

0         0      0        0     0     1        0         0      0     0            0         0 

uppercase   unitbuf   skipws

0         0      1

即ios類的15個列舉型常量與ios_base類的15位二進位制數字000 0010 0000 0001一一對應。另外,可以看到,二進位制數字的15位除了skipws和dec對應的位數預設為1之外,其他均預設為0 (注:上表是vc++的對應關係)

15個標誌的含義如下所示:

ios::boolalpha    bool型數值的輸入和輸出使用文字形式(即true或false)

ios::fixed        定點格式輸出,即以小數點的形式表示浮點數

ios::scientific      用科學記數法表示浮點數

ios::hex          採用十六進製制

ios::oct          採用八進位制

ios::dec         採用十進位制

ios::internal        輸出格式為居中對齊

ios::right             輸出格式為右對齊

ios::left          輸出格式為左對齊

ios::showpos        在正數前面加上+號

ios::showpoint     顯示末尾的0和小數點

ios::showbase      顯示進製,即在十六進製制數前新增0x,在八進位制數前新增0

ios::uppercase     大寫顯示

ios::unitbuf     每次執行輸出操作後均會清空緩衝區

ios::skipws      忽略輸入流中的空白字元,即當我們輸入的字元前面有空格時,儲存的時候會自動忽略

注:1.設定多個標誌位用"|"隔開

2.預設對齊方式為右對齊

3.setf(ios::showpoint)與precision連用時,會輸出小數點(單獨的precision不會輸出小數點)

4.ios::internal輸出格式為居中對齊,其中符號左對齊,值右對齊;如果是十六進製制,則字首0x左對齊

5.ios::uppercase只對十六進製製起作用,即將0x變為0x

6.ios::fixed或ios::scientific與ios::presicion連用表示的是小數字數,而不是有效位數

7.以上15個列舉型常量稱之為標準控制符

下面看setf()的第二種原型,即:

fmtflags setf(fmtflags,fmtflags)

其中第乙個引數是要開啟的標誌位,第二個引數是要清除的標誌位,標誌位的清除通過指示標誌位來實現

指示標誌位共有三個,如下:

其實現原理是15個標誌位中只有要清除的標誌位為1,其餘位為0,然後取反後與15個標誌位進行與操作

另外,指示標誌位也是ios類從ios_base類中繼承而來,因此ios::adjustfield等效於ios_base::adjustfield

注:清除多個標誌位用"|"隔開

清除標誌位

unsetf()函式可以實現標誌位的清除

注:unsetf()實現原理同指示標誌位是一樣的,都是15個標誌位中只有要清除的標誌位為1,其餘位為0,然後取反後與15個標誌位進行與操作

*/

#include using

namespace

std;

intmain()

C 輸出格式控制符

net有兩種格式控制符,一種是標準格式控制符,另一種是使用者自定義的。標準格式的一般形式 n表示佔位符的序號,0對應第乙個變數,1對應第2個變數,依此類推。m 是可選項,m表示輸出的變數在控制台中所佔據的字元個數。yn 是可選項。y是格式化說明符,n為正整數,代表定義資料的精度範圍。1 貨幣金額格式...

C C 輸出格式控制符

c c 格式控制符 一 型別 型別字元用以表示輸出資料的型別,其格式符和意義如下表所示 格式字元意義d 以十進位制形式輸出帶符號整數 正數不輸出符號 o以八進位制形式輸出無符號整數 不輸出字首0 x,x以十六進製制形式輸出無符號整數 不輸出字首ox u以十進位制形式輸出無符號整數 f以小數形式輸出單...

C 中cout格式化輸出的相關函式與控制符

ostream operator type char name 10 hello char p name cout hello cout void p 輸出p所指向的字串的位址 cout p 輸出h字元cout.put w put t 輸出w和t,可以拼接 cout.put 65 put 65.5 ...