从C中变化过来的各种语言的printf输出格式

在c、php和shell中经常可以碰到printf的使用,特别是在php中printf的相关变种有好几个:print、printf、sprintf、vprintf、vsprintf

在这些语言中,printf基本上都是格式化输出字符串,而且基本都是在C的基础上演变来的,下面就以php中的这些做个记录

虽然php中有这么多,但是其中他们的差别相对来说比较小

1、print

print “hello php”或 php(“hello php”)

print 只是一个语言结构,并不是一个函数,就类似于echo;所以可以不使用() 而直接“”这样进行输出

print和echo的区别是:print有返回值,总是返回 1。

2、printf()     这是一个输出函数,所以不是和上面一样使用“”的方式使用

函数原型:int printf ( string $format [, mixed $args [, mixed $... ]] )

3、sprintf()     基本和printf一样,重要的是两者之间的区别

函数原型:string sprintf ( string $format [, mixed $args [, mixed $... ]] )

区别:

printf()将格式化的字符串输出到标准输出,返回输出字串的长度

sprintf() 返回字符串,不会将字符串输出到浏览器上

4、vprintf()和vsprintf()

和上面的区别就是:它们只有两个参数:一个输出格式,一个变量数组。

上面的printf()和sprintf()除了第一个固定的输出格式外,后面的参数变量,是根据字符串中需要输出的变量数据而对应确定的。

现在,说说重点的输出格式(和C语言一样,并且shell也是这样),就是上面这些函数的第一个参数

原型:

%[padding-character][-][width][.precision]type

黑色表示必须的,[]中的表示可选的(根据实际需求)

% 表示转换说明开始,注意要输出%时,采用 %% 的方式

padding-character:填充字符,默认是空格填充,如果使用 空格或0 则可以不要在前面添加“ ‘ ”,填充其他字符就需要在前面加上一个单引号

-    表示对齐方式,默认左对齐,- 则说明要右对齐,

width    长度,这个长度是:整数部分+.+小数部分 的长度就是说:3.4是3个长度,30.4是4,就是这块按字符计算。

.precision 小数部分。. 表示小数点,precision表示小数点后保留几位。

例如:

比如上面width是 10 ,padding-character是0,参数是:30.4,precision是 2,则type是f

则输出什么?

0000030.40

 1 <?php
 2     /*
 3      * create_wangxb_20150116
 4      * print 相关知识点
 5      *
 6      */
 7     echo "*** print 只是一个语言结构,并不是一个函数,就类似于echo;所以可以不使用() 而直接“”这样进行输出 ***<br/>";
 8     $res0 = print "hello php";
 9     echo "<br/>";
10     $res1 = print("hello php");
11     echo "<br/>*********** print和echo的区别是:print有返回值,总是返回 1 ****************<br/>";
12     echo "print 返回值:res0=$res0<br/>print()返回值:res1=$res1 <br/> echo 是没有返回值的";
13     echo "<br/>*********** 定义变量:num=3.4 ***********<br/>";
14     $num = 30.4;
15     echo $num;
16     echo "<br/>";
17     $res2 = printf(‘this number is %.2f‘,$num);
18     echo "<br/>******** printf()将格式化的字符串输出到标准输出,返回输出字串的长度 ******<br/>";
19     echo "printf() 返回值 res2: $res2<br/>";
20     echo "<br/>******** sprintf() 返回字符串,不会将字符串输出到浏览器上 ******<br/>";
21     $res3 = sprintf(‘this number is %.2f‘,$num);
22     echo "sprintf() 返回值 res3(看清楚,这里我们输出的是返回值): $res3 <br/>";
23
24     echo "<br/>比如上面width是 10 ,padding-character是0,参数是:30.4,precision是 2,则type是f<br/>";
25     printf("num is %010.2f",$num);
26
27     echo "<br/>padding-character 是 * 时,即非空格和0时<br/>";
28     printf("num is %‘*10.2f",$num);
29
30     echo "<br/>第二项 [-] 时,即右对齐时<br/>";
31     printf("num is %‘*-10.2f",$num);
32
33     echo "<br/>第三项 width 时,即长度改变,注意要算上小数点这个字符<br/>";
34     printf("num is %‘*-8.2f",$num);
35
36     echo "<br/>第四项 precision 时,即小数点长度改变<br/>";
37     printf("num is %‘*-8.3f",$num);
38
39     echo "<br/>第五项 type 时,即改变输出类型 d<br/>";
40     printf("num is %‘*-8d",$num);
41 ?>

  输出:

  

时间: 2024-10-07 06:47:24

从C中变化过来的各种语言的printf输出格式的相关文章

C语言的printf输出格式控制

printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99) %c         字符 %d         有符号十进制整数 %f         浮点数(包括float和doulbe) %e(%E)     浮点数指数输出[e-(E-)记数法] %g(%G)     浮点数不显无意义的零"0" %i         有符号十进制整数(与%d相同) %u        

discuz 模板中如何使用方法和语言标签?

第一个问题:如何调用方法? 关于模板中eval的使用{eval php 语句}比如:<!--{eval echo "Hello World!"}--> 工作中遇到一个小问题,discuz的手机模板中,需要切换收藏和取消收藏. 取消收藏,需要找到forum/viewthread.htm .forum/viewthread_node.htm 模板,在viewthread_node模板中修改取消收藏的 最低层代码 /source/include/spacecp/spacecp_f

NDK中, 如何提高脚本式语言的可读性

原文来自安卓教程网android.662p.com,转载时请注明文章的来源:http://android.662p.com/thread-5245-1-1.html [概述]     NDK开发中, 最常见的脚本式语言应该就是 GLSL(OpenGL Shading Language) , 此类语言(一般情况下)不能以单个代码文件形式编写(并不以文件形式直接参与编译), 而是需要先以字符串形式完成编码, 然后通过开发语言接口的调用来完成工作. 就这种形式的编码, 个人是挺不喜欢的, 一来不易书写

逻辑是智慧生物对抗生活中不确定性的一种语言工具

我理解的逻辑是智慧生物对抗生活中不确定性的一种语言工具,但奇妙的是这个工具却可以脱离实际的万物而抽象地存有. 我们生活于其间的宇宙为什么如此这般存有,不是它的子民能轻易估量的,有人说是"我们在观看上帝下棋".我们的生活中很多事情原本是不确定.不明晰的,而理解了棋规,就能把很多事情确定下来.我们这些子民在漫长的生活实践中一步步摸索着上帝的棋规. 我猜测早期的过程可能这样发生的:最早是有了"这"和"那"的分别,能够确定恒定不变的模式以及区分不同的模式

翻转句子中单词的顺序 C语言

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开. 为简单起见,标点符号和普通字母一样处理. 例如将"I am a student"转化为"student a am I". #include <stdio.h> #include <string.h> //逆转字符串 char* Reverse(char *str, int len) { if(str == NULL || len <= 0) ret

在Android(Java)开发中如何实现类似C语言中的中断程序

在Android开发过程中,有时候会遇到这样的情况,在一个线程中,执行A操作,B操作需要等A操作结束后才进行,因此需要wait,在java中可以如下代码实现 Handler mBlueHandler = new Handler(Looper.getMainLooper()); Task task = new Task(); mBlueHandler.post(task); while (!task.finish) { synchronized (task) { try { task.wait()

ALSA 声卡 驱动 linux 4.1.36 中变化

linux 4.1.36 中变化ret = request_irq(IRQ_DMA2, s3c2440_dma2_irq, IRQF_DISABLED, "myalsa for playback", substream); IRQF_DISABLED 换为 IRQF_TRIGGER_NONE snd_soc_register_dai(&pdev->dev, &s3c2440_i2s_dai);换为static const struct snd_soc_compon

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

C语言scanf输入格式 printf输出格式

对于刚接触C语言的同学来说 可能会遇到这个问题 因为博主也是个菜鸟经常因为搞不清楚单精度双精度还有输入输出格式的问题 就这个问题也百度的很多次 所以在这里总结一下分享给大家 printf输出格式 1.转换说明符       %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99)       %c             字符       %d             有符号十进制整数       %f              浮点数(包括float和doulbe)