天天看點

2. C語言 -- printf 的花式操作

(。・∀・)ノ゙嗨!大家好,我是呆博~很開心可以在這裡給接着大家分享我的 C 語言學習筆記~因為微信對于代碼塊的支援并不是很好,是以代碼部分以截圖形式呈現,如果想擷取原始代碼可點選底部 閱讀原文 獲得。

1

從一個報錯講起

在上一篇文章中,我們使用了 C 語言在螢幕中輸出了"Hello World!",但就printf這個函數而言,它的使用卻不隻是這麼簡單。比如我們想通過下面這段代碼在螢幕上輸出魚形圖案

2. C語言 -- printf 的花式操作

在使用 gcc 進行編譯的時候會出現如下的報錯

2. C語言 -- printf 的花式操作

這個問題是因為printf的用法不符合要求,那正确的用法是什麼樣的呢?

2

printf 函數

printf 函數用于列印格式化字元串到标準輸出流,其函數原型為

2. C語言 -- printf 的花式操作

其中的 format 參數是一個格式化字元串,由格式化占位符和普通字元組成,“,”後面接的是與占位符所對應的數字、字元串等。格式化占位符(以 % 開頭)用于指明輸出的參數值如何格式化。直白的講,const char * format 這一大堆是一個字元串,變量不能直接寫在字元串中,是以用占位符占位。

2.1

格式化占位符(format)的文法

格式化占位符(format)的具體文法如下

%[flags][width][.precision][length]specifier

其中的 “[]” 表示可選參數,是以每一個格式化占位符均以 % 開始,以轉換字元(specifier)結束。是以首先介紹 specifier的内容及含義,再介紹其他參數。這些參數不需要都背下來,隻需要記下常用的即可。

specifier(轉換字元,必選)

specifier 的内容及含義如下

2. C語言 -- printf 的花式操作

需要注意的是,如果 % 後邊的字元不是轉換字元,則其行為沒有定義,編譯時會報錯。

flags(标志,可選)

flags的内容及含義如下:

2. C語言 -- printf 的花式操作

width(寬度,可選)

width 是一個數值,用于指定最小字段的寬度。轉換後的參數輸出寬度至少要達到這個數值。如果參數的字元數小于該數值,則在參數左邊(如果 flags 設定為 -,要求左對齊的話則在右邊)填充一些字元。填充字元通常為空格,但是如果 flags 設定為 0,則填充字元為數字 0。

.precision(精度,可選)

.precision 通過點号(.)分隔字段的寬度和精度

對于字元串,它指定列印的字元的最大個數

對于整數,它指定列印的數字位數(必要時可加填充位 0 以達到寬度要求)

對于轉換字元為 e、E 或 f,它指定列印的小數點後的數字位數

對于轉換字元為 g 或 G,它指定列印的有效數字位數

length(長度修飾符,可選)

length 的值可以是 h、hh、l、ll 或 L

hh 表示将相應的參數按 signed char 或 unsigned char 類型輸出

h 表示将相應的參數按 short 或 unsigned short 類型輸出

l 表示将相應的參數按 long 或 unsigned long 類型輸出

ll 表示将相應的參數按 long long 或 unsigned long long 類型輸出

L 表示将相應的參數按 long double 類型輸出

2.2

附加參數文法

int printf ( const char * format, ... )中的 ...就是附加參數,該參數的個數由格式化字元串決定。每個參數的值應當與前面格式化字元串中的占位符類型和位置一一對應。

2.3

傳回值

如果函數調用成功,傳回值是實際列印的字元數(不包含表示字元串結束的 ‘\0’);如果函數調用失敗,傳回值是一個負數

2.4

使用示例

看了上面那麼一大堆各種奇奇怪怪的參數,是不是有點暈,讓我們舉個例子看看,或許會更好了解

2. C語言 -- printf 的花式操作

編譯執行得到如下結果

2. C語言 -- printf 的花式操作

3

轉義字元

通過上面的介紹可知const char * format是一個字元串,但是文章開頭的那種寫法明顯不是一個字元串,那我們應該如何調整使得它變為一個字元串呢?通過轉義字元。

在 C 語言中,用雙引号括起來的内容稱之為字元串,即平時所說的文本。字元串可以由可見字元和轉義字元組成,像上面所示的那條魚的主要組成部分——星号(*),就是可見字元。可見字元就是你輸入什麼,顯示出來就是什麼。而你如果想将一個字元串分為兩行來顯示,那麼你就需要使用到轉義字元。轉義字元一般是表示特殊含義的非可見字元,以反斜杠開頭,常見的轉義字元及其含義如下表

2. C語言 -- printf 的花式操作

在字元串中反斜杠 + 字元是轉義字元,表示特殊含義。但反斜杠如果後邊不帶任何字元(直接換行),表示我們希望 C 語言将該行以及下一行看做是一個整體。

是以為了列印輸出一條魚,我們要将\n和\一起使用,具體代碼如下

2. C語言 -- printf 的花式操作

執行結果如下圖所示

2. C語言 -- printf 的花式操作

當然這樣的圖案可以列印很多,百度搜尋 “初級字元畫繪制工具”我們可以獲得很多表情,或者自定義一個表情,比如說下面的派大星

2. C語言 -- printf 的花式操作

輸出結果如下

2. C語言 -- printf 的花式操作

好了~今天的内容就到這裡了,感謝大家的信任和支援~

原文釋出時間為:2018-10-02

本文作者: 獨孤呆博

本文來自雲栖社群合作夥伴“

輪子工廠

”,了解相關資訊可以關注“

"

繼續閱讀