C语言格式输出函数printf详解201111_第1页
C语言格式输出函数printf详解201111_第2页
C语言格式输出函数printf详解201111_第3页
C语言格式输出函数printf详解201111_第4页
C语言格式输出函数printf详解201111_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言格式输出函数printf()详解(2014-11-11)C语言格式输出函数printf()详解printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。在前面的例题中我们已多次使用过这个函数。printf函数调用的一般形式printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。printf函数调用的一般形式为:printf(“格式控制字符串”,输出表列)其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表示按字符型输出等。非格式字符串原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。【例4-3】printf函数举例#include<stdio.h>intmain(void){inta=88,b=89;printf("%d%d\n",a,b); printf("%d,%d\n",a,b);printf("%c,%c\n",a,b); printf("a=%d,b=%d",a,b);return0;}本例中四次输出了a、b的值,但由于格式控制串不同,输出的结果也不相同。第3行的输出语句格式控制串中,两格式串%d之间加了一个空格(非格式字符),所以输出的a、b值之间有一个空格。第4行的printf语句格式控制串中加入的是非格式字符逗号,因此输出的a、b值之间加了一个逗号。第5行的格式串要求按字符型输出a、b值。第6行中为了提示输出结果又增加了非格式字符串。格式字符串在TurboC中格式字符串的一般形式为:[标志][输出最小宽度][.精度][长度]类型。其中方括号口中的项为可选项。各项的意义介绍如下。1)类型类型字符用以表示输出数据的类型,其格式符和意义如下表所示:格式字符意义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%£或%&中较短的输出宽度输出单、双精度实数输出单个字符s输出字符串2)标志标志字符为-、+、#和空格四种,其意义下表所示:标志意义结果左对齐,右边填空格+输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号#对c、s、d、u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e、g、f类当结果有小数时才给出小数点。3)输出最小宽度用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。4)精度精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。5)长度长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。【例4-4】#include<stdio.h>intmain(void){inta=15;longfloatb=123.1234567; //原来b的定义为floatb=123.1234567; //经读者@邓小良反馈,笔者发现会溢出,在前面加了longdoublec=12345678.1234567;chard='p';printf("a=%d\n",a);printf("a(%%d)=%d,a(%%5d)=%5d,a(%%o)=%o,a(%%x)=%x\n\n",a,a,a,a);//%%可以输出%printf("a=%f\n",b);printf("b(%%f)=%f,b(%%lf)=%lf,b(%%5.4lf)=%5.4lf,b(%%e)=%e\n\n",b,b,b,b);printf("c=%f\n",c);printf("c(%%lf)=%lf,c(%%f)=%f,c(%%8.4lf)=%8.4lf\n\n",c,c,c);printf("d=%c\n",d);printf("d(%%c)=%c,d(%%8c)=%8c\n",d,d);return0;}运行结果:本例中:第11行以四种格式输出整型变量a的值,其中“%5d”要求输出宽度为5,而a值为15只有两位故补三个空格。第14行以四种格式输出实型量b的值。其中“%f”和“%lf”格式的输出相同,说明“『符对竽类型无影响°“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。第17行输出双精度实数:'%8.4lf”由于指定精度为4位故截去了超过4位的部分。第20行输出字符量d其中“%8c”指定输出宽度为8故在输出字符p之前补加7个空格。使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。TurboC是按从右到左进行的。请看下面两个例子。【例4-5】在一个printf()里输出#include<stdio.h>intmain(void){inti=8;printf("Therawvalue:i=%d\n",i);printf("++i=%d\n++i=%d\n--i=%d\n--i=%d\n",++i,++i,--i,--i);return0;}运行结果:Therawvalue:i=8++i=8++i=7--i=6--i=7【例4-6】在多个printf()里输出复制纯文本新窗口#include<stdio.h>intmain(void){inti=8;printf("Therawvalue:i=%d\n",i);printf("++i=%d\n",++i);printf("++i=%d\n",++i);printf("--i=%d\n",--i);printf("--i=%d\n",--i);return0;}运行结果:Therawvalue:i=8++i=9++i=10--i=9--i=8这两个程序的区别是用一个printf语句和多个printf语句输出。但从结果可以看出是不同的。为什么结果会不同呢?就是因为printf函数对输出表中各量求值的顺序是自右至左进行的。但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。注意:经读者@熊腾浩少反馈,我们发现原来的例子在VC6.0下计算过程比较复杂,不能直观的说明自右向左的求值顺序。上面的代码是修改后的,修改日期为2014-07-05。下面是老代码及分析:【例4-5】main(){inti=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);}【例4-6】main(){inti=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);}这两个程序的区别是用一个printf语句和多个printf语句输出。但从结果可以看出是不同的。为什么结果会不同呢?就是因为printf函数对输出表中各量求值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论