C語言printf()函式:格式化輸出函式

weixin_33860553發表於2016-04-05

C語言printf()函式:格式化輸出函式

標頭檔案:#include <stdio.h>

printf()函式是最常用的格式化輸出函式,其原型為:
    int printf( char * format, ... );

printf()會根據引數 format 字串來轉換並格式化資料,然後將結果輸出到標準輸出裝置(顯示器),直到出現字串結束('\0')為止。

引數 format 字串可包含下列三種字元型別:
  • 一般文字,將會直接輸出
  • ASCII 控制字元,如\t、\n 等有特定含義
  • 格式轉換字元

格式轉換為一個百分比符號(%)及其後的格式字元所組成。一般而言,每個%符號在其後都必需有一個引數與之相呼應(只有當%%轉換字元出現時會直接輸出%字元),而欲輸出的資料型別必須與其相對應的轉換字元型別相同。

printf()格式轉換的一般形式如下:
    %(flags)(width)(. prec)type
以括號括起來的引數為選擇性引數,而%與type 則是必要的,下面介紹 type 的幾種形式。

1) 整數
  • %d  整數的引數會被轉成有符號的十進位制數字
  • %u  整數的引數會被轉成無符號的十進位制數字
  • %o  整數的引數會被轉成無符號的八進位制數字
  • %x  整數的引數會被轉成無符號的十六進位制數字,並以小寫abcdef 表示
  • %X  整數的引數會被轉成無符號的十六進位制數字,並以大寫ABCDEF 表示浮點型數
  • %f double  型的引數會被轉成十進位制數字,並取到小數點以下六位,四捨五入
  • %e double  型的引數以指數形式列印,有一個數字會在小數點前,六位數字在小數點後,而在指數部分會以小寫的e 來表示
  • %E 與%e 作用相同,唯一區別是指數部分將以大寫的E 來表示
  • %g double  型的引數會自動選擇以%f 或%e 的格式來列印,其標準是根據列印的數值及所設定的有效位數來決定。
  • %G 與%g 作用相同,唯一區別在以指數形態列印時會選擇%E 格式。

2) 字元及字串
  • %c 整型數的引數會被轉成unsigned char 型列印出
  • %s 指向字串的引數會被逐字輸出,直到出現NULL 字元為止
  • %p 如果是引數是"void *"型指標則使用十六進位制格式顯示

prec 有幾種情況:
  • 正整數的最小位數
  • 在浮點型數中代表小數位數
  • 格式代表有效位數的最大值
  • 在%s 格式代表字串的最大長度
  • 若為×符號則代表下個引數值為最大長度

width 為引數的最小長度,若此欄並非數值,而是*符號,則表示以下一個引數當做引數長度。

flags 有下列幾種情況
  • +  一般在列印負數時,printf ()會加印一個負號,整數則不加任何負號,此旗標會使得在列印正數前多一個正號 (+)。
  • #  此旗標會根據其後轉換字元的不同而有不同含義。當在型別為o 之前 (如%#o),則會在列印八進位制數值前多印一個o。而在型別為x 之前 (%#x)則會在列印十六進位制數前多印'0x',在型態為e、E、f、g 或G 之前則會強迫數值列印小數點。在型別為g 或G 之前時則同時保留小數點及小數位數末尾的零。
  • 0  當有指定引數時,無數字的引數將補上0。預設是關閉此旗標,所以一般會列印出空白字元。

【返回值】成功則返回寫入的字元數目。

如果發生寫入錯誤,將會設定檔案錯誤標誌(可通過 ferror() 檢測),並返回一個負數。

如果在寫入寬字元時一個多位元組的字元發生編碼錯誤,那麼 errno 將被設定為 EILSEQ,並返回一個負數。

printf( format, ... ) 等價於 fprintf(stdout, format, ...),更多資訊請參考 fprintf() 函式。

【例項】分別輸出整數、浮點數和字串。
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. int a=1;
  5. float b=5.0;
  6. char str[100]= "";
  7. scanf("%c %c %c",&a,&b,str);
  8. /*分別演示 整數*/
  9. printf("int is:%d\n",a);
  10. /*分別演示 浮點數*/
  11. printf("float is:%f\n",b);
  12. /*分別演示 字串*/
  13. printf("char is:%s\n",str);
  14. return 0;
  15. }
輸出結果:
【執行結果】
1 4.4 fs
int is:1
float is:4.400000
char is:fs

例子首先是等待使用者輸入整數浮點數和一個字串,然後呼叫函式printf()按照對應的格式輸出。

又如,輸出更多格式的資料。
  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf ("Characters: %c %c \n", 'a', 65);
  5. printf ("Decimals: %d %ld\n", 1977, 650000L);
  6. printf ("Preceding with blanks: %10d \n", 1977);
  7. printf ("Preceding with zeros: %010d \n", 1977);
  8. printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
  9. printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
  10. printf ("Width trick: %*d \n", 5, 10);
  11. printf ("%s \n", "A string");
  12. return 0;
  13. }
輸出結果:
Characters: a A
Decimals: 1977 650000
Preceding with blanks:       1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick:    10
A string

 

相關文章