格式输出函数printf()详解

您所在的位置:网站首页 c语言指数形式输出 格式输出函数printf()详解

格式输出函数printf()详解

2024-05-08 19:55| 来源: 网络整理| 查看: 265

printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。

printf函数调用的一般形式

printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。printf函数调用的一般形式为:    printf(“格式控制字符串”, 输出表列)其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:

“%d”表示按十进制整型输出; “%ld”表示按十进制长整型输出; “%c”表示按字符型输出等。

非格式字符串原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。

1 #include 2 int main(void){ 3 int a=88,b=89; 4 printf("%d %d\n",a,b); 5 printf("%d,%d\n",a,b); 6 printf("%c,%c\n",a,b); 7 printf("a=%d,b=%d",a,b); 8 return 0; 9 } 10 88 89    输出语句格式控制串中,两格式串%d 之间加了一个空格(非格式字符),所以输出的a、b值之间有一个空格。 11 88,89    printf语句格式控制串中加入的是非格式字符逗号,因此输出的a、b值之间加了一个逗号。 12 X,Y      格式串要求按字符型输出a、b值 13 a=88,b=89    为了提示输出结果又增加了非格式字符串。

本例中四次输出了a、b的值,由于格式控制串不同,输出的结果也不相同.

格式字符串

在Turbo C中格式字符串的一般形式为:   

[标志][输出最小宽度][.精度][长度]类型。

其中方括号[]中的项为可选项。

各项的意义介绍如下。

  1) 类型

    类型字符用以表示输出数据的类型,其格式符和意义如下表所示:

格式字符意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进制形式输出无符号整数(不输出前缀Ox) u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 e,E 以指数形式输出单、双精度实数 g,G 以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串

  2) 标志

    标志字符为 -、+、# 和空格四种,其意义下表所示:

标 志意义 - 结果左对齐,右边填空格 + 输出符号(正号或负号) 空格 输出值为正时冠以空格,为负时冠以负号 # 对c、s、d、u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e、g、f 类当结果有小数时才给出小数点。

  3) 输出最小宽度

    用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

  4) 精度

  精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

  5) 长度

长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。

     

#include int main(void){ int a = 15; long float b = 123.1234567; double c = 12345678.1234567; char d = '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); // %% 可以输出 %  // 四种格式输出整型变量a的值,其中“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。  // %o 八进制打印输出, %x 十六进制打印输出 见 (1)类型 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);     // 以四种格式输出实型量b的值。其中“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响。    // “%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。

printf(

"c=%f\n", c); printf("c(%%lf)=%lf, c(%%f)=%f, c(%%8.4lf)=%8.4lf\n\n",c,c,c);      // 输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。 printf("d=%c\n", d); printf("d(%%c)=%c, d(%%8c)=%8c\n",d,d);    // 输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格。 return 0; }

使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。请看下面两个例子。

     

#include int main(void) { int i = 8; printf("The raw value: i=%d\n", i); printf("++i=%d \n++i=%d \n--i=%d \n--i=%d\n", ++i, ++i, --i, --i); return 0; }

         

 

  在多个printf()里输出

#include int main(void){ int i=8; printf("The raw value: i=%d\n", i); printf("++i=%d\n", ++i); printf("++i=%d\n", ++i); printf("--i=%d\n", --i); printf("--i=%d\n", --i); return 0; } The raw value: i=8 ++i=9 ++i=10 --i=9 --i=8

 

二进制数、八进制数和十六进制数的输出

 C语言中常用的整数有 short、int 和 long 三种类型,通过 printf 函数,可以将它们以八进制、十进制和十六进制的形式输出。上节我们讲解了如何以十进制的形式输出,这节我们重点讲解如何以八进制和十六进制的形式输出,下表列出了不同类型的整数、以不同进制的形式输出时对应的格式控制符:

 shortintlong 八进制 %ho %o %lo 十进制 %hd %d %ld 十六进制 %hx 或者 %hX %x 或者 %X %lx 或者 %lX

十六进制数字的表示用到了英文字母,有大小写之分,要在格式控制符中体现出来:

%hx、%x 和 %lx 中的x小写,表明以小写字母的形式输出十六进制数; %hX、%X 和 %lX 中的X大写,表明以大写字母的形式输出十六进制数。

八进制数字和十进制数字不区分大小写,所以格式控制符都用小写形式。如果你比较叛逆,想使用大写形式,那么行为是未定义的,请你慎重:

有些编译器支持大写形式,只不过行为和小写形式一样; 有些编译器不支持大写形式,可能会报错,也可能会导致奇怪的输出。 输出时加上前缀

 区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀。在格式控制符中加上#即可输出前缀,例如 %#x、%#o、%#lX、%#ho 等,请看下面的代码:

  #include int main() { short a = 0b1010110; //二进制数字 int b = 02713; //八进制数字 long c = 0X1DAB83; //十六进制数字 printf("a=%#ho, b=%#o, c=%#lo\n", a, b, c); //以八进制形似输出 printf("a=%hd, b=%d, c=%ld\n", a, b, c); //以十进制形式输出 printf("a=%#hx, b=%#x, c=%#lx\n", a, b, c); //以十六进制形式输出(字母小写) printf("a=%#hX, b=%#X, c=%#lX\n", a, b, c); //以十六进制形式输出(字母大写) return 0; }

十进制数字没有前缀,所以不用加#。如果你加上了,那么它的行为是未定义的,有的编译器支持十进制加#,只不过输出结果和没有加#一样,有的编译器不支持加#,可能会报错,也可能会导致奇怪的输出;但是,大部分编译器都能正常输出,不至于当成一种错误。

小数的输出

 小数也可以使用 printf 函数输出,包括十进制形式和指数形式,它们对应的格式控制符分别是:

%f 以十进制形式输出 float 类型; %lf 以十进制形式输出 double 类型; %e 以指数形式输出 float 类型,输出结果中的 e 小写; %E 以指数形式输出 float 类型,输出结果中的 E 大写; %le 以指数形式输出 double 类型,输出结果中的 e 小写; %lE 以指数形式输出 double 类型,输出结果中的 E 大写。

读者需要注意的两点是:

%g 默认最多保留六位有效数字,包括整数部分和小数部分;%f 和 %e 默认保留六位小数,只包括小数部分。 %g 不会在最后强加 0 来凑够有效数字的位数,而 %f 和 %e 会在最后强加 0 来凑够小数部分的位数。

除了 %g,还有 %lg、%G、%lG:

%g 和 %lg 分别用来输出 float 类型和 double 类型,并且当以指数形式输出时,e小写。 %G 和 %lG 也分别用来输出 float 类型和 double 类型,只是当以指数形式输出时,E大写。

如果不想让数字使用默认的类型,那么可以给数字加上后缀,手动指明类型:

在整数后面紧跟 l 或者 L(不区分大小写)表明该数字是 long 类型; 在小数后面紧跟 f 或者 F(不区分大小写)表明该数字是 float 类型。

 

本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/WG11/p/formatPrint_C.html,作者:def_Class

https://www.cnblogs.com/WG11/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3