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)
作者:碼農有道
如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發我的文章,謝謝!!!