C printf格式化輸出

2022-09-03 12:15:07 字數 2789 閱讀 5400

**:

格式化輸出

格式化輸出的函式有printf、sprintf和snprintf等,功能略有不同,使用方法大同小異,本章節我們以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=

格式化輸出到字串

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)

執行結果

程式執行第二行只輸出了14個字元,注意,snprintf函式在unix和windows平台下的表現略有不同,在windows平台下,第二行會輸出15個字元。

c語言多行書寫

在我們之前學習的過程中,編寫的程式的功能很簡單,一句**很短,但是在實際開發中,引數往往很長很多,一句**可能會很長,需要用多行才能書寫。

如果我們在一行**的行尾放置乙個反斜槓,c語言編譯器會忽略行尾的換行符,而把下一行的內容也算作是本行的內容。這裡反斜槓起到了續行的作用。

如果我們不使用反斜槓,當我們試圖初始化乙個跨多行的字串時,c語言編譯器可能會發出警告或錯誤。如下面的語句所示:

c語言中還有一種拆分字串的方法,那就是將其寫個多個字串,c語言編譯器會自動將這些字串連線起來。因此,下面的表示式:"aaaaa"  "bbbbb" "ccccc" 實際上相當於 "aaaaabbbbbccccc"。

多行書寫的方法如下:

把字串很長,引數很多的**用多行書寫,可以使程式**結構更清晰,以下**是我實際開發中用到的一句**,這還不算長的。

C printf 格式輸出

c語言中printf 格式輸出 technorati 標籤 c,printf,輸出格式 printf 函式 作用 向終端輸出若干個任意型別的資料 putchar 只能輸出字元,而且只能是乙個字元,而printf可以輸出多個資料,且為任意型別 一 printf 的一般格式 printf 格式控制,輸出...

C Printf 輸出格式

格式字元 功能 a 使用科學計數法將實數按十六進製制輸出,階碼前為字母p c99標準新增 a 使用科學計數法將實數按十六進製制輸出,階碼前為字母p c99標準新增 c 輸出乙個字元 d 輸出有符號十進位制數 e 使用科學計數法輸出實數,階碼前為字母e e 使用科學計數法輸出實數,階碼前為字母e f ...

格式化輸出

a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 char c 乙個iso寬字元 d 有符號十進位制整數 int ld ld 長整型資料 long hd 輸出短整形。e 浮點數 e 記數法 e 浮點數 記數法 f 單精度浮點數 預設float 十進位制記數法...