2 C語言 printf 的花式操作

2021-09-20 01:43:50 字數 2905 閱讀 4372

從乙個報錯講起

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

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

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

如果函式呼叫成功,返回值是實際列印的字元數(不包含表示字串結束的 『\0』);如果函式呼叫失敗,返回值是乙個負數

2.4使用示例

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

編譯執行得到如下結果

轉義字元

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

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

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

所以為了列印輸出一條魚,我們要將\n和\一起使用,具體**如下

執行結果如下圖所示

輸出結果如下

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

原文發布時間為:2018-10-02

輪子工廠

」,了解相關資訊可以關注「輪子工廠

"

2 C語言位操作

常用位操作 在這裡插入描述 位異或 兩位都相等,結果為0,不相等則為1 左移位 將乙個運算元的各二進位制全部左移若干位,左邊移除出去的二進位制位丟棄,右邊的二進位制位補0。每進行一次左移位操作,得到的結果是原來運算元的一倍 x n x 2 n 位操作與暫存器 暫存器的操作 1 暫存器特定位的清零用 ...

C語言高階篇 2 C語言位操作

1 位操作符 1 位與 2 位或 3 位取反 4 位異或 位與 位或 位異或的特點總結 位與 任何數,其實就是1或者0 與1位與無變化,與0位與變成0 位或 任何數,其實就是1或者0 與1位或變成1,與0位或無變化 位異或 任何數,其實就是1或者0 與1位異或會取反,與0位異或無變化 2 左移位 與...

(十三)指標 2 C語言的指標操作

和c語言中其他變數一樣,使用指標變數前必須先對它們進行宣告。為了宣告乙個指標變數,需要使用以下宣告句法 雖然指向整型的指標和指向字元型的指標在計算機內部都是以位址形式表示的,但兩者在c語言中還是有區別的。要使用該位址中的資料,編譯程式必須知道如何解釋位址裡的資料,因此就要求顯式地說明指標所指向的資料...