<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • 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等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费