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


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

閱讀原文 獲得。

1從一個報錯講起

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

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

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

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

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

2printf 函數

printf 函數用於打印格式化字符串到標準輸出流,其函數原型為

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

其中的 format 參數是一個格式化字符串,由格式化佔位符和普通字符組成,“,”後面接的是與佔位符所對應的數字、字符串等。格式化佔位符(以 % 開頭)用於指明輸出的參數值如何格式化。

直白的講,const char * format 這一大堆是一個字符串,變量不能直接寫在字符串中,所以用佔位符佔位。

2. C语言——printf 的花式操作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. C语言——printf 的花式操作
2.2

附加參數語法

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

2. C语言——printf 的花式操作2.3

返回值

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

2. C语言——printf 的花式操作2.4

使用示例

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

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

編譯執行得到如下結果

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

3轉義字符

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


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

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

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

所以為了打印輸出一條魚,我們要將<code>\n/<code>和<code>\/<code>一起使用,具體代碼如下

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

執行結果如下圖所示

  1. 2. C語言——printf 的花式操作

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

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

輸出結果如下

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

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

參考

[1] “小甲魚” 視頻課程《帶你學C帶你飛》【第一季】P2

2. C语言——printf 的花式操作

-----------------

微信搜索公眾號【輪子工廠】後臺回覆關鍵字:
1.回覆【圖書】:獲取15本新手自學編程,零基礎入門經典學習教材;
2.回覆【我要造輪子】:獲取100多本計算機類經典書籍;

3.回覆【開發工具】:獲取幾大主流編程語言的開發工具~
4.回覆【內推】:可幫你內推到大廠工作。2. C语言——printf 的花式操作


分享到:


相關文章: