C 庫函數 - printf()
描述
C 庫函數 int printf(const char *format, ...) 發送格式化輸出到標準輸出 stdout。
printf()函數的調用格式為:
printf("<格式化字串>", <參量表>);
聲明
下麵是 printf() 函數的聲明。
int printf(const char *format, ...)
參數
format -- 這是字串,包含了要被寫入到標準輸出 stdout 的文本。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加參數中指定的值替換,並按需求進行格式化。format 標籤屬性是 %[flags][width][.precision][length]specifier,具體講解如下:
格式字元 | 意義 |
---|---|
d | 以十進位形式輸出帶符號整數(正數不輸出符號) |
o | 以八進制形式輸出無符號整數(不輸出首碼0) |
x,X | 以十六進制形式輸出無符號整數(不輸出首碼Ox) |
u | 以十進位形式輸出無符號整數 |
f | 以小數形式輸出單、雙精度實數 |
e,E | 以指數形式輸出單、雙精度實數 |
g,G | 以%f或%e中較短的輸出寬度輸出單、雙精度實數 |
c | 輸出單個字元 |
s | 輸出字串 |
p | 輸出指針地址 |
lu | 32位無符號整數 |
llu | 64位無符號整數 |
flags(標識) | 描述 |
---|---|
- | 在給定的字段寬度內左對齊,默認是右對齊(參見 width 子說明符)。 |
+ | 強制在結果之前顯示加號或減號(+ 或 -),即正數前面會顯示 + 號。默認情況下,只有負數前面會顯示一個 - 號。 |
空格 | 如果沒有寫入任何符號,則在該值前面插入一個空格。 |
# | 與 o、x 或 X 說明符一起使用時,非零值前面會分別顯示 0、0x 或 0X。 與 e、E 和 f 一起使用時,會強制輸出包含一個小數點,即使後邊沒有數字時也會顯示小數點。默認情況下,如果後邊沒有數字時候,不會顯示顯示小數點。 與 g 或 G 一起使用時,結果與使用 e 或 E 時相同,但是尾部的零不會被移除。 |
0 | 在指定填充 padding 的數字左邊放置零(0),而不是空格(參見 width 子說明符)。 |
width(寬度) | 描述 |
---|---|
(number) | 要輸出的字元的最小數目。如果輸出的值短於該數,結果會用空格填充。如果輸出的值長於該數,結果不會被截斷。 |
* | 寬度在 format 字串中未指定,但是會作為附加整數值參數放置於要被格式化的參數之前。 |
.precision(精度) | 描述 |
---|---|
.number | 對於整數說明符(d、i、o、u、x、X):precision 指定了要寫入的數字的最小位數。如果寫入的值短於該數,結果會用前導零來填充。如果寫入的值長於該數,結果不會被截斷。精度為 0 意味著不寫入任何字元。 對於 e、E 和 f 說明符:要在小數點後輸出的小數位數。 對於 g 和 G 說明符:要輸出的最大有效位數。 對於 s: 要輸出的最大字符數。默認情況下,所有字元都會被輸出,直到遇到末尾的空字元。 對於 c 類型:沒有任何影響。 當未指定任何精度時,默認為 1。如果指定時不帶有一個顯式值,則假定為 0。 |
.* | 精度在 format 字串中未指定,但是會作為附加整數值參數放置於要被格式化的參數之前。 |
length(長度) | 描述 |
---|---|
h | 參數被解釋為短整型或無符號短整型(僅適用於整數說明符:i、d、o、u、x 和 X)。 |
l | 參數被解釋為長整型或無符號長整型,適用於整數說明符(i、d、o、u、x 和 X)及說明符 c(表示一個寬字元)和 s(表示寬字元字串)。 |
L | 參數被解釋為長雙精度型(僅適用於浮點數說明符:e、E、f、g 和 G)。 |
附加參數 -- 根據不同的 format 字串,函數可能需要一系列的附加參數,每個參數包含了一個要被插入的值,替換了 format 參數中指定的每個 % 標籤。參數的個數應與 % 標籤的個數相同。
返回值
如果成功,則返回寫入的字元總數,否則返回一個負數。
實例
下麵的實例演示了 printf() 函數的用法。
實例
#include <stdio.h>
int main ()
{
int ch;
for( ch = 75 ; ch <= 100; ch++ ) {
printf("ASCII 值 = %d, 字元 = %c\n", ch , ch );
}
return(0);
}
讓我們編譯並運行上面的程式,這將產生以下結果:
ASCII 值 = 75, 字元 = K ASCII 值 = 76, 字元 = L ASCII 值 = 77, 字元 = M ASCII 值 = 78, 字元 = N ASCII 值 = 79, 字元 = O ASCII 值 = 80, 字元 = P ASCII 值 = 81, 字元 = Q ASCII 值 = 82, 字元 = R ASCII 值 = 83, 字元 = S ASCII 值 = 84, 字元 = T ASCII 值 = 85, 字元 = U ASCII 值 = 86, 字元 = V ASCII 值 = 87, 字元 = W ASCII 值 = 88, 字元 = X ASCII 值 = 89, 字元 = Y ASCII 值 = 90, 字元 = Z ASCII 值 = 91, 字元 = [ ASCII 值 = 92, 字元 = \ ASCII 值 = 93, 字元 = ] ASCII 值 = 94, 字元 = ^ ASCII 值 = 95, 字元 = _ ASCII 值 = 96, 字元 = ` ASCII 值 = 97, 字元 = a ASCII 值 = 98, 字元 = b ASCII 值 = 99, 字元 = c ASCII 值 = 100, 字元 = d
以下實例輸出各種格式化數據:
實例
#include <stdio.h>
int main()
{
char ch = 'A';
char str[20] = "www.xuhuhu.com";
float flt = 10.234;
int no = 150;
double dbl = 20.123456;
printf("字元為 %c \n", ch);
printf("字串為 %s \n" , str);
printf("浮點數為 %f \n", flt);
printf("整數為 %d\n" , no);
printf("雙精度值為 %lf \n", dbl);
printf("八進制值為 %o \n", no);
printf("十六進制值為 %x \n", no);
return 0;
}
執行輸出結果為:
字元為 A 字串為 www.xuhuhu.com 浮點數為 10.234000 整數為 150 雙精度值為 20.123456 八進制值為 226 十六進制值為 96
規定符
- %d 十進位有符號整數
- %u 十進位無符號整數
- %f 浮點數
- %s 字串
- %c 單個字元
- %p 指針的值
- %e 指數形式的浮點數
- %x, %X 無符號以十六進製錶示的整數
- %o 無符號以八進製錶示的整數
- %g 把輸出的值按照 %e 或者 %f 類型中輸出長度較小的方式輸出
- %p 輸出地址符
- %lu 32位無符號整數
- %llu 64位無符號整數