成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用 printf 來格式化輸出

系統(tǒng) 其他OS
來了解一下 printf ,一個神秘的、靈活的和功能豐富的函數(shù),可以替換 echo、print 和 cout。

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

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

[[340314]]

printf 簡史

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

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

  1. $ echo hello 
  2. hello 

這是在 Bash 中使用 printf 得到同樣結(jié)果:

  1. $ printf "%s\n" hello 
  2. hello 

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

printf 輸出

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

  • \n: 新行
  • \r: 回車換行
  • \t: 水平制表符
  • \NNN: 一個包含一個到三個數(shù)字,使用八進(jìn)制值表示的特殊字節(jié)

例如:

  1. $ printf "\t\123\105\124\110\n" 
  2.      SETH 

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

如果同樣使用 echo 來輸出會產(chǎn)生更多的字符:

  1. $ printf "\t\123\105\124\110\n" 
  2. \t\123\105\124\110\n 

使用 Python 的 print 函數(shù)來完成同樣的任務(wù),你會發(fā)現(xiàn) Python 的 print 命令比你想象的要強大:

  1. >>> print("\t\123\n") 
  2.         S 
  3. >>> 

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

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

使用 printf 格式化輸出

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

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

  • %s: 字符串
  • %d: 數(shù)字
  • %f: 浮點數(shù)字
  • %o: 一個八進(jìn)制的數(shù)字

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

  1. string var="hello\n"
  2. system.out.printf("%s", var); 

把這個代碼包裹在適當(dāng)?shù)臉影逦募?,在?zhí)行后,將呈現(xiàn):

  1. $ ./example 
  2. hello 

但是,當(dāng)一個變量的內(nèi)容更改時,有意思的地方就來了。假設(shè)你想基于不斷增加的數(shù)字來更新輸出:

  1. #include <stdio.h> 
  2. int main() { 
  3.   int var=0
  4.   while ( var < 100) { 
  5.     var++; 
  6.   printf("Processing is %d% finished.\n", var); 
  7.   } 
  8.   return 0; 

編譯并運行:

  1. Processing is 1% finished. 
  2. [...] 
  3. Processing is 100% finished. 

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

使用 printf 限制小數(shù)位數(shù)

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

  1. $ printf "%.2f\n" 3.141519 
  2. 3.14 

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

  1. #include <math.h> 
  2. #include <stdio.h> 
  3. int main() { 
  4.   fprintf(stdout, "%.2f\n", 4 * atan(1.0)); 
  5.   return 0; 

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

使用 printf 來在數(shù)字上添加逗號

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

  1. $ printf "%'d\n" 1024 
  2. 1,024 
  3. $ printf "%'d\n" 1024601 
  4. 1,024,601 

使用 printf 來添加前綴零

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

  1. $ printf "%03d.jpg\n" {1..10} 
  2. 001.jpg 
  3. 002.jpg 
  4. [...] 
  5. 010.jpg 

注意:每個數(shù)字最多使用 3 位數(shù)字。

使用 printf

正如這些 printf 示例所顯示,包括控制字符,尤其是 \n ,可能會冗長,并且語法相對復(fù)雜。這就是為什么開發(fā)像 echo 和 cout 之類的快捷方式的原因。不過,如果你時不時地使用 printf ,你就會習(xí)慣于這種語法,并且它也會變成你的習(xí)慣。我不認(rèn)為 printf 有任何理由成為你在日?;顒又写蛴r的首選,但是它是一個很好的工具,當(dāng)你需要它時,它不會拖累你。

花一些時間學(xué)習(xí)你所選擇語言中的 printf,并且當(dāng)你需要時就使用它。它是一個強有力的工具,你不會后悔隨時可用的工具。

 

責(zé)任編輯:趙寧寧 來源: Linux中國
相關(guān)推薦

2023-04-11 10:37:40

bash命令printf

2022-08-01 21:38:25

Linux fmt命令

2024-01-08 22:03:22

python代碼開發(fā)

2010-07-16 16:00:08

Perl格式化輸出

2010-07-16 15:23:34

Perl格式化輸出

2010-07-16 15:44:57

Perl格式化輸出

2010-07-16 14:37:26

Perl格式化輸出

2010-07-21 14:25:24

Perl格式化輸出

2010-07-15 11:16:25

Perl格式化輸出

2022-05-09 08:17:37

InstantJava字符

2010-07-15 11:29:25

Perl格式化輸出

2019-05-17 13:20:57

Black格式化工具Python

2024-03-28 10:17:03

JDK 17字符串十六進(jìn)制

2010-03-16 11:20:38

Python格式化

2010-08-03 10:46:41

Flex代碼格式化

2009-06-05 15:27:23

Eclipse工具格式化模板應(yīng)用

2019-08-08 14:47:07

Linux命令行JSON

2023-01-12 09:30:31

Linux命令行xml

2022-05-09 14:04:27

Python字符串格式化輸出

2022-12-30 08:30:28

Linux命令行json
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美色综合 | 色婷婷综合网 | 成人av播放| 日韩一区在线观看视频 | 久久99这里只有精品 | 欧美成年网站 | 国产熟熟| 一区二区三区四区不卡视频 | www.日韩免费 | 99精品在线免费观看 | 91久久久久| 国产免费色 | 91一区二区 | 欧美日本久久 | 日本午夜免费福利视频 | 激情福利视频 | 99re视频精品 | 日韩电影一区 | 美女久久视频 | 欧美精品久久久 | 亚洲欧洲综合av | 91精品国产一区二区三区 | 91精品国产综合久久精品 | 99综合网 | 久久中文视频 | 日韩国产一区二区三区 | 欧美国产日韩在线观看成人 | 狠狠干狠狠操 | 日本中出视频 | 福利社午夜影院 | av av在线 | 精品中文字幕一区二区三区 | 99精品国产一区二区青青牛奶 | 欧美在线一区二区三区 | 手机av在线 | 日韩国产专区 | 午夜精品久久 | 在线视频一区二区 | 国产成人自拍一区 | 狠狠夜夜| 国产一区二区三区久久久久久久久 |