色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文教你搞懂這個不起眼的printf函數

如意 ? 來源:Linux中國 ? 作者:LCTT 鄭 ? 2020-09-02 11:59 ? 次閱讀

當我開始學習 Unix 時,我很早就接觸到了 echo 命令。同樣,我最初的 Python 課程也涉及到了 print 函數。再想起學習 C++Java 時學到 cout 和 systemout。似乎每種語言都驕傲地宣稱擁有一種方便的單行輸出方法,并生怕這種方式要過時一樣宣傳它。

但是當我翻開中級教程的第一頁后,我遇到了 printf,一個晦澀難懂的、神秘莫測的,又出奇靈活的函數。本文一反向初學者隱藏 printf 這個令人費解的傳統,旨在介紹這個不起眼的 printf 函數,并解釋如何在幾乎所有語言中使用它。

printf 簡史

術語 printf 代表“格式化打印print formatted”,它可能最早出現 Algol 68 編程語言中。自從它被納入到 C 語言后,printf 已經在 C++、Java、Bash、PHP 中一次次重新實現,并且很可能在你最喜歡的 “后 C” 語言中再次出現。

顯然,它很受歡迎,但很多人認為它的語法很復雜,尤其是與 echo 或 print 或 cout 等替代的函數相比尤為明顯。例如,這是在 Bash 中的一個簡單的 echo 語句:

$ echo hello

hello

$

這是在 Bash 中使用 printf 得到同樣結果:

$ printf “%s\n” hello

hello

$

但是所增加的復雜性反而讓你擁有很多功能,這是為什么 printf 值得學習的確切原因。

printf 輸出

在 printf 背后的基本思想是:它能夠基于與內容分離的樣式信息來格式化輸出。例如,這里是 printf 認可的視作特殊字符的特定序列集合。你喜歡的語言可能會有或多或少的序列,但是通常包含:

\n: 新行

\r: 回車換行

\t: 水平制表符

\NNN: 一個包含一個到三個數字,使用八進制值表示的特殊字節

例如:

$ printf “\t\123\105\124\110\n”

SETH

$

在這個 Bash 示例中, printf 渲染一個制表符后,然后是分配給四個八進制值字符串的 ASCII 字符,并以一個生成一個新行(\n)的控制序列結束。

如果同樣使用 echo 來輸出會產生更多的字符:

$ printf “\t\123\105\124\110\n”

\t\123\105\124\110\n

$

使用 Python 的 print 函數來完成同樣的任務,你會發現 Python 的 print 命令比你想象的要強大:

》》》 print(“\t\123\n”)

S

》》》

顯然,Python 的 print 包含傳統的 printf 特性以及簡單的 echo 或 cout 的特性。

不過,這些示例包括的只是文字字符,盡管在某些情況下它們也很有用,但它們可能是 printf 最不重要的部分。printf 的真正的威力在于格式化說明。

使用 printf 格式化輸出

格式化說明符是以一個百分號(%)開頭的字符。

常見的格式化說明符包括:

%s: 字符串

%d: 數字

%f: 浮點數字

%o: 一個八進制的數字

這些格式化說明符是 printf 語句的占位符,你可以使用一個在其它地方提供的值來替換你的 printf 語句中的占位符。這些值在哪里提供取決于你使用的語言和它的語法,這里有一個簡單的 Java 例子:

string var=“hello\n”;

system.out.printf(“%s”, var);

把這個代碼包裹在適當的樣板文件中,在執行后,將呈現:

$ 。/example

hello

$

但是,當一個變量的內容更改時,有意思的地方就來了。假設你想基于不斷增加的數字來更新輸出:

#include 《stdio.h》

int main() {

int var=0;

while ( var 《 100) {

var++;

printf(“Processing is %d% finished.\n”, var);

}

return 0;

}

編譯并運行:

Processing is 1% finished.

[。..]

Processing is 100% finished.

注意,在代碼中的兩個 % 將被解析為一個打印出來的 % 符號。

使用 printf 限制小數位數

數字也可以是很復雜,printf 提供很多格式化選項。你可以對浮點數使用 %f 限制打印出多少個小數位。通過把一個點(。)和一個限制的數放置在百分符號和 f 之間, 你可以告訴 printf 打印多少位小數。這是一個簡單的用 Bash 寫的簡練示例:

$ printf “%.2f\n” 3.141519

3.14

$

類似的語法也適用于其它的語言。這里是一個 C 語言的示例:

#include 《math.h》

#include 《stdio.h》

int main() {

fprintf(stdout, “%.2f\n”, 4 * atan(1.0));

return 0;

}

對于三位小數,使用 .3f ,依次類推。

使用 printf 來在數字上添加逗號

因為位數大的數字很難解讀,所以通常使用一個逗號來斷開大的數字。你可以在百分號和 d 之間放置一個撇號(‘),讓 printf 根據需要添加逗號:

$ printf “%’d\n” 1024

1,024

$ printf “%‘d\n” 1024601

1,024,601

$

使用 printf 來添加前綴零

printf 的另一個常用的用法是對文件名稱中的數字強制實行一種特定的格式。例如,如果你在一臺計算機上有 10 個按順序排列的文件,計算機可能會把 10.jpg 排在 1.jpg 之前,這可能不是你的本意。當你以編程的方式寫一個到文件時,你可以使用 printf 來用前綴為 0 的字符形成文件名稱。這是一個簡單的用 Bash 寫的簡練示例:

$ printf “%03d.jpg\n” {1..10}

001.jpg

002.jpg

[。..]

010.jpg

注意:每個數字最多使用 3 位數字。

使用 printf

正如這些 printf 示例所顯示,包括控制字符,尤其是 \n ,可能會冗長,并且語法相對復雜。這就是為什么開發像 echo 和 cout 之類的快捷方式的原因。不過,如果你時不時地使用 printf ,你就會習慣于這種語法,并且它也會變成你的習慣。我不認為 printf 有任何理由成為你在日常活動中打印時的首選,但是它是一個很好的工具,當你需要它時,它不會拖累你。

花一些時間學習你所選擇語言中的 printf,并且當你需要時就使用它。它是一個強有力的工具,你不會后悔隨時可用的工具。
責編AJX

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UNIX
    +關注

    關注

    0

    文章

    296

    瀏覽量

    41489
  • 函數
    +關注

    關注

    3

    文章

    4329

    瀏覽量

    62590
  • Printf
    +關注

    關注

    0

    文章

    83

    瀏覽量

    13657
收藏 人收藏

    評論

    相關推薦

    文教程:手把手教你焊接貼片元件

    文教程:手把手教你焊接貼片元件,首先來張全部焊接個點的PCB圖
    發表于 04-01 11:03 ?3.6w次閱讀
    圖<b class='flag-5'>文教</b>程:手把手<b class='flag-5'>教你</b>焊接貼片元件

    不起眼的led到底還能走多久?

    不起眼的led到底還能走多久?
    發表于 11-05 21:40

    搞懂UPS主要內容

    導讀:UPS是系統集成項目中常用到的設備,也是機房必備的設備。本文簡單介紹了UPS的種類、功能、原理,品質選擇與配置選擇方式,基礎維護等相關的內容。搞懂UPS本文主要內容:UPS種類、功能
    發表于 09-15 07:49

    篇小短文教你了解工字電感的各項參數

    篇小短文教你了解工字電感的各項參數篇小短文教你了解工字電感的各項參數工字電感是我們在插件作業中會經常看見且用到的電子元器件中的種;
    發表于 02-01 10:16

    printf函數用法示例

    《OpenCV3編程入門》書本配套源代碼:printf函數用法示例
    發表于 06-06 15:20 ?10次下載

    文教你怎么測量壓敏電阻的好壞

    本文主要介紹了文教你怎么測量壓敏電阻的好壞,“壓敏電阻“是種具有非線性伏安特性的電阻器件,主要用于在電路承受過壓時進行電壓鉗位,吸收多余的電流以保護敏感器件。判斷壓敏電阻通常需要
    發表于 04-10 09:16 ?7.2w次閱讀

    實現重定向printf()和scanf() 函數案例分析

    要想printf()和scanf() 函數工作,我們需要把printf()和scanf() 重新定向到串口中。重定向是指用戶可以自己重寫C 的庫函數,當連接器檢查到用戶編寫了與C 庫
    發表于 06-23 08:26 ?9213次閱讀
    實現重定向<b class='flag-5'>printf</b>()和scanf() <b class='flag-5'>函數</b>案例分析

    不起眼的電阻里有哪些學問?

    電阻在我們的工作中比較常見,別小看這不起眼的電阻,里面有很多學問。 貼片電阻(SMD Resistor),又名片式固定電阻器,是種設計為貼片安裝的電阻器。 這些SMD電阻器通常比傳統的電阻器小得多
    的頭像 發表于 03-29 11:35 ?1467次閱讀
    <b class='flag-5'>不起眼</b>的電阻里有哪些學問?

    40篇英語短文教你精通3500個單詞

    40篇英語短文教你精通3500個單詞
    發表于 08-17 11:13 ?0次下載

    《51單片機筆記》keilC51軟件中printf函數內部機制詳解,單片機中怎么使用printf函數printf函數編寫程序例子及

    printf函數的講解
    發表于 11-20 16:51 ?11次下載
    《51單片機筆記》keilC51軟件中<b class='flag-5'>printf</b><b class='flag-5'>函數</b>內部機制詳解,單片機中怎么使用<b class='flag-5'>printf</b><b class='flag-5'>函數</b>,<b class='flag-5'>printf</b><b class='flag-5'>函數</b>編寫程序例子及

    STM32使用串口重定向系統printf函數輸出時出現初始化或使用printf函數系統卡死的原因及解決辦法

    STM32使用串口重定向系統printf函數輸出時出現初始化或使用printf函數系統卡死的原因及解決辦法在STM32開發當中,會經常使用
    發表于 12-09 10:06 ?13次下載
    STM32使用串口重定向系統<b class='flag-5'>printf</b><b class='flag-5'>函數</b>輸出時出現<b class='flag-5'>一</b>初始化或使用<b class='flag-5'>printf</b><b class='flag-5'>函數</b>系統卡死的原因及解決辦法

    通過串口利用printf函數輸出數據

    printf函數格式printf函數具有強大的輸出功能%表示格式化字符串輸出目前printf
    發表于 12-28 19:11 ?11次下載
    通過串口利用<b class='flag-5'>printf</b><b class='flag-5'>函數</b>輸出數據

    使用printf函數的安全隱患

    程序員都知道,也都會使用printf函數,但你知道它也有“安全隱患”嗎?
    的頭像 發表于 10-09 09:49 ?1941次閱讀

    個簡單而不起眼的2瓦迷你音頻放大器電路

    這是個簡單而不起眼的2瓦迷你音頻放大器電路,適用于小型袖珍收音機和其他便攜式音頻小工具。該電路基于菲利普斯半導體IC TDA7052。該放大器甚至可以從 3V 水銀紐扣電池運行。這使其成為電池供電小工具的理想選擇。
    的頭像 發表于 04-02 17:45 ?3476次閱讀
    <b class='flag-5'>一</b>個簡單而<b class='flag-5'>不起眼</b>的2瓦迷你音頻放大器電路

    stdio.h實現了printf函數?

    我們平時包含的 stdio.h 頭文件,里面是不是實現了 printf 函數? 為什么會有這個疑問?因為每次使用 printf,就得包含 stdio.h ,這就導致很多同學誤以為,st
    的頭像 發表于 12-18 10:28 ?108次閱讀
    主站蜘蛛池模板: 久久久久久久久人体| 成人网视频在线观看免费| 亚洲精品91| 午夜福利小视频400| 色宅男看片午夜大片免费看| 亲胸摸下面激烈免费网站| 男人J放进女人P全黄网站| 龙广在线收听| 蜜臀AV中文字幕熟女人妻| 兰桂坊人成社区亚洲精品| 绝对诱惑在线试听| 免费精品美女久久久久久久久| 老头xxx| 免费韩国伦理2017最新| 男人边吃奶边挵进去呻吟漫画| 暖暖 免费 高清 日本在线 | 中文字幕在线视频在线看| 在线亚洲97se| 2022国产精品不卡a| 97视频在线观看视频最新| AV天堂午夜精品一区| 超级碰碰青草久热国产| 大陆午夜伦理| 国产乱子影视频上线免费观看| 国产一级特黄a大片99| 和搜子的日子 在线观看| 久久yy99re66| 美女乱草鲍高清照片| 强奷乱码中文字幕熟女免费| 少妇高潮久久久久7777| 亚洲 日韩 国产 中文视频| 亚洲欧美中文字幕先锋| 2021扫黑风暴在线观看免费完整版| 98久久人妻少妇激情啪啪| swag合集120部| 国产精品俺来也在线观看| 国产在线观看黄| 巨胸美女狂喷奶水www网麻豆| 欧美一区二区三区久久综| 外女思春台湾三级| 伊人久久五月丁婷婷|