转换说明符及其含义.docx_第1页
转换说明符及其含义.docx_第2页
转换说明符及其含义.docx_第3页
转换说明符及其含义.docx_第4页
转换说明符及其含义.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

格式化输出 在使用printf函数时,当系统遇到输出的转换说明符后,会自动用后面对应的输出项的值代替它的位置,然后输出。格式控制字符串中的转换字符应与输出列表中的待输出项之间应一一对应,这些转换字符控制对应的输出项以该格式输出。数据类型必须与格式符相匹配。 格式控制字符串的一般形式: % 修饰符 转换说明符 其中修饰符为可选项,包括标志修饰符、宽度修饰符、精度修饰符、长度修饰符,用于确定输出数据的宽度、精度、对齐方式等,用于产生更加规范、整齐、美观的数据输出形式,当没有修饰符时,以上各项按系统缺省值设定显示。 1)转换说明符 转换说明符规定了对应输出项的输出格式,即将输出的数据转换为指定的格式输出。该项不能省略。常用的转换说明符及其含义见表1。 表1 转换说明符及其含义 转换说明符 意义 C按字符型输出 d或i按十进制整数输出 u 按无符号十进制整数输出 f 按浮点型小数输出 E或e按指数形式(科学计数法)输出 o 按八进制整数输出(不输出前缀o) X或x按十六进制整数输出(不输出前缀ox) s 按字符串输出 G或g按e和f格式中输出宽度较短的一种形式输出 转换说明符要与%一起使用,不能省略%。上表中的字符只有放在%的后面才作为输出的转换说明。 例如:int max; printf(“%d”,max); 表示变量max的值以十进制整数形式输出。 又如:int d=15; printf(“d=%d”,d); 在该格式控制字符串中,第1个d不是输出格式字而是一个普通字符,需要按原字符形式输出,第3个d是一个变量名,是输出项,只有放在%后的第2个d才是转换说明符, 说明变量d的值(15)以十进制整数形式输出。输出格式是:d=15。 提示 printf()函数中的格式字中,除格式说明符E、G、X外,其它格式说明符必须小写。例1:输出格式控制符的使用。 main( ) int a1=+400,a2=-400;float b=3.1415926,e=31415.26535898;float g=3.140000;char c=a;double d=3.1415926535898;printf(a1=%dn,a1);printf(a1=%on,a1);printf(a1=%xn,a1);printf(a1=%un,a1);printf(a2=%dn,a2);printf(a2=%un,a2);printf(b=%fn,b);printf(e=%en,e);printf(g=%gn,g);printf(d=%fn,d);printf(c=%cn,c);printf(s=%sn, Cprogram);执行程序,输出结果为:a1=400a1=620a1=190a1=400a2=-400a2=65136b=3.141593e=3.141593e+04g=3.14d=3.141593c=as=Cprogram从输出结果可以看出:只有减号(-)才会被打印出来,加号(+)是不打印的。?使用%u格式控制符打印正整数时,该数不发生变化,但是打印负整数时,该负整数将被转换为无符号整数并打印出来。?缺省情况下,使用%f、%e、%E打印出来的值带有6个小数位,如果小数位数不够6位,则在最后添0补位。?单精度数一般有7位有效数位。使用%e和%E打印的带有指数的值,在指数前打印出字母e或E,同时小数点左侧的数字仅打印一位(科学计数法)。双精度数可以用%f格式输出,它的有效位一般为16位,6位小数位。 %g不打印输出数据的小数部分尾部的0。 一个转换说明符是以%开始,以表3-2中的字符结束。其中可以插入修饰符。 2)长度修饰符 常用的长度修饰符有两种:l(长)表示按长整型量输出,h(短)表示按短整型量输出。可以和输出转换说明符d、f、u等连用。其用法和含义见表2。 表2 长度修饰符的意义格式 意义 %ld用于长整型数据的输出 %hd用于短整型数据的输出 %lf用于双精度型数据的输出 例2:长度修饰符的使用。 main()long int a=1234567;int b=12345;double d=1234567.123456789;printf(a=%ldn,a);printf(b=%hdn,b);printf(d=%lfn,d);执行程序,结果如下:a=1234567b=12345d=1234567.123457例3:读入数据与输出数据类型的匹配。 main( ) int a;printf(“enter a data:n”);scanf(%d,&a);printf(%dn,a);程序运行结果:enter a data:100000000-520036096由于输入数据的类型为整型,读入的数据本身已超出基本整型范围,使计算结果发生错误,同时,输出函数的输出格式字为长整型,造成输出结果与输入数据不相符。因此应将程序修改如下:main( )long int a;clrscr();printf(enter a data:n);scanf(%ld,&a);printf(%ldn,a);enter a data:10000000l10000000提示 输入长整型数据时,应在数据的后面加上字母l或L。3)宽度修饰符和精度修饰符 宽度修饰符用来指定printf()函数输出数据的占位宽度,用一个十进制整数表示输出数据的位数,插在百分号%与转换说明符之间,其作用是控制打印数据的宽度,也称为“域宽”。也可以在prinf函数中指定输出数据的精度。以一个小数点开始,后紧跟着一个十进制整数表示精度,插在百分号%与转换说明符之间。对于不同数据类型,精度的含义也不相同:在使用%d时,精度表示最少要打印的数字的个数。在使用%f、%e、%E时,精度是小数点后面显示的数字个数。在使用%s时,精度表示输出的字符串中字符的个数。 提示 scanf不允许指定精度输入。宽度和精度也可以同时使用,其使用形式是:域宽.精度。 常用的宽度修饰符与精度修饰符说明以及含义见表3。 表3 宽度修饰符与精度修饰符说明 修饰符及说明格式 意义 %md以宽度m输出整型数,不足m位数时左侧补以空格。 %0md以宽度m输出整型数,不足m位数时左侧补以0(零)。 %m.nf以宽度m输出实型数,小数位数为n位。 %ms以宽度m输出字符串,不足m位数时左侧补以空格。 %m.ns以宽度m输出字符串左侧的n个字符,不足m位数时左侧补以空格。 例3:宽度修饰符和精度修饰符的使用。 main()printf(%3dn,1);printf(%3dn,10);printf(%3dn,100);printf(%3dn,1000);printf(%0.3dn,1);printf(%0.3dn,10) ;printf(%0.3dn,100);printf(%0.3dn,1000);printf(%.3dn,1);printf(%.3dn,10);printf(%.3dn,100);printf(%.3dn,1000);printf(%7.2fn,123.4567);printf(%5.2fn,123.4567);printf(%2.7fn,123.4567);printf(%5sn,Cprogram);printf(%7.3sn,Cprogram);printf(%2.6sn,Cprogram);执行程序,结果如下:110100100000101010010000010101001000123.46123.46123.4567000CprogramCprCprogr分析程序的结果,可以看出:如果被打印的实际数据的宽度小于指定的宽度,则缺省下在宽度内为右对齐。左补空格或补0。直到总的数据个数满足宽度的要求。当指定的输出数据宽度小于数据的实际宽度时,则按实际数据的位数输出打印(宽度自动增加);对于整数而言,按该数的实际宽度输出;对于浮点数,按实际位数输出,但如果制定了浮点数的精度,则相应的小数位按精度的位数四舍五入;对于字符串,按实际串长度输出。通常情况下,精度用于描述浮点数的小数位数,但是,当采用精度描述整数或字符串时,如果被打印的整数数据包含的数字个数小于指定的精度,就在被打印数据的前面加0,直到总的数字个数等于该精度为止。而对于被打印的字符串,则精度确定该字符串左侧的字符个数,这些字符输出在指定域宽的右侧。不足域宽位数时左侧补以空格。在实际程序应用中,还有一种更为灵活的宽度和精度的控制方法,用整型常量或整型变量的值作为输出数据的域宽和精度。方法是以“*”取代域宽修饰符和精度修饰符放在%的后面,以计算出来的整数表达式的值作为宽度和精度。例如:float a=123.45;printf(“%*.*f”,6,1,a);此处6为输出宽度,1为输出精度,输出结果为: 123.5,右对齐。提示 没有为要打印的数据提供足够大的宽度,使得其他被打印的数据发生位置偏移,从而产生令人费解的输出格式。4)标志修饰符 在printf 函数中,可以使用标志修饰符控制输出格式。常见的标志修饰符见表4。 表4 标志修饰符及其作用标志修饰符 意义 - “左对齐”方式:输出数据左对齐,右侧补空格。缺省时输出数据则为右对齐,左补格。 +输出数据为正时,在数据之前显示一个+号,为负时,在数据之前显示一个-号。 #输出数据为八进制时加前缀0,为十六进制时前缀0x。 空格 输出数据为正值时,在数据之前打印空格,为负时,数据之前显示一个-号。 例4:标志修饰符的使用。main()printf(%10dn,123);printf(%-10dn,123);printf(%10.2fn,123.45678);printf(%-10.2fn,123.45678);printf(%10sn,Cprogram);printf(%-10sn,Cprogram) ;printf(n);printf(%+5dn,12345);printf(%+5dn,-12345);printf(% 5dn,12345);printf(% 5dn,-12345);printf(n);printf(%#on,100);printf(%on,100);printf(%#xn,100);printf(%xn,100);执行程序,结果如下:123123123.46123.46CprogramCprogram+12345-1234512345-1234501441440x6464提示 数据输出时,注意输出格式基对齐方式的统一,否则造成输出数据难以读懂。例如:int x=123,y=456;printf(“%3d%-3d”,x,y);其结果是:1234565)普通字符 格式控制字符串中可以包含大量的可打印字符和转义字符,可打印字符主要是一些说明字符,这些字符将按原书写样式显示在屏幕上,如果有汉字系统支持,也可以输出汉字。转义字符是不可打印字符,用以控制产生特殊的输出效果。 例如:int a=123,b=12345;printf(a=%d,a); printf(b=%dn,b);其输出结果为:a=123,b=12345在第一个printf函数的格式控制字符串中,a、=和,都是普通字符,可以

温馨提示

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

评论

0/150

提交评论