C語言printf函數詳解


C語言格式化輸出的函數有printf、sprintf和snprintf等,功能略有不同,使用方法大同小異,本文以printf函數為例來介紹它們的用法。

對於 printf函數,相信大家並不陌生。之所以稱它為格式化輸出函數,該函數的聲名如下:

int printf(const char *format, ...);

大家看到printf函數的聲明就會有點懵,它參數的寫法與我們之前學到的函數知識不一樣,printf函數是一個“可變參數函數”(即函數參數的個數是可變的),可變參數函數的知識以后再介紹,現在只要知道怎么使用就行了。

printf函數的參數的個數和類型都是可變的,每一個參數的輸出格式都有對應的格式說明符與之對應,從格式串的左端第1 個格式說明符對應第 1 個輸出參數,第 2 個格式說明符對應第 2 個輸出參數,第 3個格式說明符對應第 3 個輸出參數,以此類推。

其中,格式說明符的形式如下(方括號 [] 中的項為可選項):

   %[flags][width][.prec] type

1、類型符(type)

它用以表示輸出數據的類型,以下是常用類型的匯總,不常用的就不介紹了。

%hd、%d、%ld 以十進制、有符號的形式輸出 short、int、long 類型的整數。

%hu、%u、%lu 以十進制、無符號的形式輸出 short、int、long 類型的整數

%c 輸出字符。

%lf 以普通方式輸出double(float棄用,long doube無用)。

%e 以科學計數法輸出double。

%s 輸出字符串。

2、寬度(width)

它用於控制輸出內容的寬度。

   printf("=%12s=\n","abc");     // 輸出=         abc=
   printf("=%12d=\n",123);       // 輸出=         123=
   printf("=%12lf=\n",123.5);    // 輸出=  123.500000=

3、對齊標志(flags)

flags它用於控制輸出內容的對齊方式。

不填或+:輸出的內容右對齊,這是缺省的方式,上一小節就是右對齊的示例。

-:輸出的內容左對齊。

   printf("=%-12s=\n","abc");    // 輸出=abc         =
   printf("=%-12d=\n",123);     // 輸出=123         =
   printf("=%-12f=\n",123.5);    // 輸出=123.500000  =

如果輸出的內容是整數或浮點數,並且對齊的方式是右對齊,可以加0填充,例如:

   printf("=%012s=\n","abc");  // 輸出=         abc=
   printf("=%012d=\n",123);   // 輸出=000000000123=
   printf("=%012f=\n",123.5);  // 輸出=00123.500000= 

從上面第一行代碼的結果看出,輸出的內容不是整數或浮點數,是字符串,不能在前面填0。

左對齊的時候,能在整數或浮點數的后面補0嗎?浮點數最多可以補到6位,整數不行,為什么?您的存款能在后面補0嗎?

4、精度(prec)

如果輸出的內容是浮點數,它用於控制輸出內容的精度,也就是說小數點后面保留多少位,后面的數四舍五入。

   printf("=%12.2lf=\n",123.5);   // 輸出=      123.50=
   printf("=%.2lf=\n",123.5);     // 輸出=123.50=
   printf("=%12.2e=\n",123500000000.0);  // 輸出=    1.24e+11=
   printf("=%.2e=\n",123500000000.0);    // 輸出=1.24e+11=

5、格式化輸出到字符串

int printf(const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);

printf是把結果輸出到屏幕,sprintf把格式化輸出的內容保存到字符串str中,snprintf的n類似於strncpy中的n,意思是只獲取輸出結果的前n-1個字符,不是n個字符。

C語言提供了把字符串轉換為整數和浮點數據的庫函數,但是沒有把整數和浮點數據轉換為字符串的庫函數,而是采用sprintf和snprintf函數格式化輸出到字符串。

示例(book98.c)

/*
 * 程序名:book98.c,此程序演示格式化輸出sprintf和snprintf函數。
 * 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>

int main()
{
   char str[301];

  // 格式化輸出到str中
  sprintf(str,"%d,%c,%f,%s",10,'A',25.97,"一共輸入了三個數。");
  printf("%s\n",str);

  // 格式化輸出到str中,只截取前7個字符
  snprintf(str,8,"%d,%c,%f,%s",10,'A',25.97,"一共輸入了三個數。");
  printf("%s\n",str);
}

運行結果
在這里插入圖片描述

程序運行第二行只輸出了6個字符,注意,snprintf函數在unix和windows平台下的表現略有不同,在windows平台下,第二行會輸出7個字符。

6、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。

來源:C語言技術網(www.freecplus.net
作者:碼農有道
如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發我的文章,謝謝!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM