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

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

1、從一個報錯講起

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

載入超時,點擊重試

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

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

2、printf 函數

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

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

2.1 格式化佔位符(format)的語法

格式化佔位符(format)的具體語法如下

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

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

specifier(轉換字元,必選)

specifier 的內容及含義如下

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

flags(標誌,可選)

flags的內容及含義如下:

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 返回值

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

2.4 使用示例

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

編譯執行得到如下結果

3、轉義字元

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

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

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

所以為了列印輸出一條魚,我們要將
一起使用,具體代碼如下

執行結果如下圖所示

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

輸出結果如下

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

5、參考

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

6、抽獎環節

對,廠長送溫暖(づ ̄3 ̄)づ╭?~

轉發這個海報到微信盆友圈並自擬10個字以上的推薦語,然後把截圖發送到「小胖窮」的微信上(微信號:build_wheels),廠長會隨機抽取兩位同學給你們送書,紙質包郵的那種哦~

只要是你想要的任何書,100塊錢以內,技術類、非技術類的都可以和我說,我會把書寄到你手中,國慶之後開始抽獎

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

微信搜索公眾號【輪子工廠】後台回復關鍵字:

1.回復【圖書】:獲取15本新手自學編程,零基礎入門經典學習教材;

2.回復【我要造輪子】:獲取100多本我根據知乎上面關於計算機問題的高贊回答裡面的介紹整理出來的書籍;

3.回復【開發工具】:獲取幾大主流編程語言的開發工具~

4.回復【C】:免費獲取C語言從入門到進階的教程

推薦閱讀:

TAG:編程語言 | 編程 | C/C |