格式化輸出

2022-09-12 14:12:07 字數 2286 閱讀 4625

格式化輸出——printf函式

輸出函式 printf將內部數值轉換為字元的形式。前面的有關章節中已經使用過該函式。

下面只講述該函式最典型的用法,附錄b中給出了該函式完整的描述。

int printf(char *format, arg1, arg2, ...);

函式printf 在輸出格式format 的控制下,將其引數進行轉換與格式化,並在標準輸出設

備上列印出來。它的返回值為列印的字元數。

格式字串包含兩種型別的物件:普通字元和轉換說明。在輸出時,普通字元將原樣不

動地複製到輸出流中,而轉換說明並不直接輸出到輸出流中,而是用於控制printf 中引數

的轉換和列印,每個轉換說明都由乙個百分號字元(即%)開始,並以乙個轉換字元結束。在

字元%和轉換字元中間可能依次包含下列組成部分:

負號,用於指定被轉換的引數按照左對齊的形式輸出。

數,用於指定最小字段寬度。轉換後的引數將列印不小於最小字段寬度的字段。如

果有必要,字段左邊(如果使用左對齊的方式,則為右邊)多餘的字元位置用空格

填充以保證最小字段寬。

小數點,用於將字段寬度和精度分開。

數,用於指定精度,即指定字串中要列印的最大字元數、浮點數小數點後的位數、

整型最少輸出的數字數目。

字母h或l,字母h表不將整數作為short型別列印,字母l表示將整數作為long

型別列印。

表 7-1 列出了所有的轉換字元,如果%後面的字元不是乙個轉換說明,則該行為是未定義

的。表 7-1 printf函式基本的轉換說明

字元引數型別:輸出形式

d, i int 型別;十進位制數

o int 型別;無符號八進位制數(沒有前導0)

x, x int 型別;無符號十六進製制數(沒有前導0x或0x),10~15 分別用abcdef或abcdef 表示

u int 型別;無符號十進位制數

c int 型別;單個字元

s char *型別;順序列印字串中的字元,直到遇到'\0'或已列印了由精度指定的字元數為止

f double 型別;十進位制小數[-]其中d 的個數由精度指定(預設值為6)

e, e double 型別;[-] e ±xx或[-] e ±xx,其中d 的個數由精度指定(預設值為6)

g, g double 型別;如果指數小於-4 或大於等於精度,則用%e 或%e 格式輸出,否則用%f 格式輸出。尾部的0 和

小數點不列印

p void *型別;指標(取決於具體實現)

% 不轉換引數;列印乙個百分號%

在轉換說明中,寬度或精度可以用星號*表示,這時,寬度或精度的值通過轉換下一引數

(必須為int型別)來計算。例如,為了從字串s中列印最多max個字元,可以使用下列

語句:printf("%.*s", max, s);

前面的章節中已經介紹過大部分的格式轉換,但沒有介紹與字串相關的精度。下表說

明了在列印字串"hello, world"(12 個字元)時根據不同的轉換說明產生的不同結果。

我們在每個欄位的左邊和右邊加上冒號,這樣可以清晰地表示出字段的寬度。

:%s: :hello, world:

:%10s: :hello, world:

:%.10s: :hello, wor:

:%-10s: :hello, world:

:%.15s: :hello, world:

:%-15s: :hello, world :

:%15.10s: : hello, wor:

:%-15.10s: :hello, wor :

注意:函式printf 使用第乙個引數判斷後面引數的個數及型別。如果引數的個數不夠

或者型別錯誤,則將得到錯誤的結果。請注意下面兩個函式呼叫之間的區別:

printf(s); /* fails if s contains % */

printf("%s", s); /* safe */

函式sprintf執行的轉換和函式printf相同,但它將輸出儲存到乙個字串中:

int sprintf(char *string, char *format, arg1, arg2, ...);

sprintf函式和printf函式一樣,按照format 格式格式化引數序列arg1、arg2、…,

但它將輸出結果存放到string中,而不是輸出到標準輸出中。當然,string必須足夠大以

存放輸出結果。

練習 7-2 編寫乙個程式,以合理的方式列印任何輸入。該程式至少能夠根據使用者的習

慣以八進位制或十六進製制列印非圖形字元,並截斷長文字行。

c格式化輸出

一 printf 函式 printf 函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。printf 函式的呼叫格式為 printf 格式化字串 參量表 其中格式化字串包括兩部分內容 一部分是正常字元,這些字元將按原樣輸出,另一部分是格式化規定字元,以 開...

134C格式化輸出,C輸出格式控制

在輸出資料時,為簡便起見,往往不指定輸出的格式,由系統根據資料的型別採取預設的格式,但有時希望資料按指定的格式輸出,如要求以十六進製制或八進位制形式輸出乙個整數,對輸出的小數只保留兩位小數等。有兩種方法可以達到此目的。一種是我們已經介紹過的使用控制符的方法,第2種是使用流物件的有關成員函式。分別敘述...

第三章格式化輸入輸出

3.1 格式化輸入和輸出 一 格式化輸出 1.printf函式的使用格式 printf 格式字串 引數1,引數2,引數n 說明 1 格式字串中包含了普通字元和格式說明符。每個格式說明符以 開始,以乙個轉換符結束,在 和轉換符之間可以使用乙個或多個標誌。2 引數是表示式 包括常量 變數 帶運算子的表示...