当我开始学习 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 3D渲染一个制表符后,随后是分派给四个八进制值字符串数组的 ASCII 标识符,并以一个转化成一个新行(\\n)的操纵编码序列完毕。
假如一样应用 echo 来输出会造成大量的标识符:
$ echo \"\\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.
留意,在源代码中的2个 % 将被分析为一个打印出出來的 % 标记。
应用 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 \"d.jpg\\n\" {1..10}
001.jpg
002.jpg
[...]
010.jpg
留意:每一个数据较多应用 3 位数据。
应用 printf
正如这种 printf 实例所表明,包含控制字符,尤其是 \\n ,很有可能会冗杂,而且英语的语法相对性繁杂。这就是为什么开发设计像 echo 和 cout 之类的快捷方式图标的缘故。但是,假如你隔三差五地应用 printf ,你也就会习惯这类英语的语法,而且它也会成为你的习惯性。我并不觉得 printf 有任何借口变成你在日常主题活动中打印出时的优选,可是它是一个非常好的专用工具,如果你必须它时,它不容易连累你。
花一些時间学习培训你所挑选语言中的 printf,而且如果你必须时就应用它。它是一个强大的专用工具,你不会后悔随时随地可以用的专用工具。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。