c語言printf用法例子「c語言printf語句」

C語言程序開發中,很多程序員喜歡使用 printf() 函數列印一些日誌,便於觀察和調整程序,因此 printf() 函數是一個使用相當頻繁的函數。有趣的問題,C語言printf整數佔位符為什麼是%d呢,而不是%i呢?

有趣的問題

有趣的問題

一般來說,所謂日誌,其實就是一些字元串,printf() 函數為了方便的將其他(字元串以外)類型的參數整合入字元串,提供了一些佔位符,例如 %s, %d, %f, %p 等。

一個有趣的問題是,%s 可以填充字元串(string),%f 可以填充浮點數(float),%p 則可以填充一個指針(pointer),這些佔位符分別是用對應英文單詞的首字母表示的,因此比較好記。那麼常用於填充整數的 %d 為什麼不按照 integer 的首字母 %i 呢?有趣的問題,C語言printf整數佔位符為什麼是%d呢,而不是%i呢?

填充整數的 %d 為什麼不按照 integer 的首字母 %i 呢?

printf() 函數的佔位符

事實上,%d 中的 d 並不表示 integer,而是表示 decimal(10進位)。類似的 %x 常用於列印 16 進位整數(hexadecimal), %o 常用於列印 8 進位整數(octal)。C語言程序開發中的整數顯然可以是任意進位的。

調用 printf() 函數時,若是希望列印一個一個整數,完全可以使用%i作為佔位符,下面是一段C語言代碼示例:

#include <stdio.h>
int main()
{
printf("%in", 5);
return 0;
}

編譯並執行這段C語言代碼,得到的的輸出是符合預期的:

# gcc t.c
# ./a.out
5

在很多C語言程序中,使用 printf() 列印整數使用的佔位符更多是 %d,因為它更加具體,表明希望將整數以更符合人類習慣的 10 進位輸出。

有趣的問題,C語言printf整數佔位符為什麼是%d呢,而不是%i呢?

類似的,調用 scanf() 函數讀取用戶輸入的整數時,也可以同時使用 %i 和 %d,%i 佔位符意味著用戶輸入的整數將被解析為任意進位的整數(八進位、十六進位、十進位等),而 %d 的意義更加明確——將整數解析為十進位整數。

下面再來看一段C語言代碼示例:

#include <stdio.h>
int main() {
 int out = 10;
 int in[4];
 printf("%d %i %x %on", out, out, out, out);
 sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
 printf("%d %d %d %dn", in[0], in[1], in[2], in[3]);
 sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
 printf("%d %d %dn", in[0], in[1], in[2]);
 return 0;
}

有趣的問題,C語言printf整數佔位符為什麼是%d呢,而不是%i呢?

C語言代碼示例

編譯這段C語言代碼並執行,得到如下輸出:

# gcc t1.c
# ./a.out 
10 10 a 12
10 8 16 8
16 10 8

我們將注意力放在 %d 和 %i 的區別上,應該能夠發現,010 這個數字在使用 %d 佔位符時,會被解析為十進位的 10,而使用 %i 佔位符時,則被解析為十進位的 8。類似的,其他異同留給讀者自己體會了。

小結

本節主要討論了一個有趣的問題,很多C語言初學者在剛剛接觸 printf() 函數的佔位符時,常覺得這些佔位符很難記憶,其實它們大都是對應數據類型英文單詞的首字母。由於C語言程序中的整數常常有不同進位之分,因此更常使用的整數佔位符不是integer的首字母 %i,而是具有更加明確含義的,也即十進位整數的 %d,弄清這一點,佔位符就很好記了。有趣的問題,C語言printf整數佔位符為什麼是%d呢,而不是%i呢?

點個關注吧

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/273568.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:06
下一篇 2024-12-17 14:06

相關推薦

發表回復

登錄後才能評論