当前位置:   article > 正文

C语言printf函数

printf

C语言printf函数

printf函数简介

printf是C语言格式化输出函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。

printf申明于头文件#include <stdio.h>。函数原型:int printf(const char * format, ...);

返回值: 正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。

调用格式: printf函数的调用格式为:printf("格式化字符串",输出表列)。

格式化字符串包含三种对象,分别为: 

  1. 字符串常量。
  2. 格式控制字符串。
  3. 转义字符。 

字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。


printf函数格式控制字符串详解

printf的格式控制字符串组成: %[flags][width][.prec][length]type

分别代表为:%[标志][最小宽度][.精度][类型长度]类型。


类型(type)

首先说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。type用于规定输出数据的类型,含义如下:

占位符对应数据类型含义示例
%dint输出int类型十进制数据。

 printf("%d",2147483647);//输出2147483647

%iint

输出int类型十进制数据。

 printf("%i",2147483647);//输出2147483647

%o

unsigned int

输出unsigned int类型八进制数据。

printf("%o",4294967295);//输出37777777777

%uunsigned int输出unsigned int类型十进制数据。printf("%u",4294967295);//输出4294967295

%x

unsigned int

输出unsigned int类型十六进制数据,字母部分是小写。

printf("%x",4294967295);//输出ffffffff

%Xunsigned int输出unsigned int类型十六进制数据,字母部分是大写。printf("%X",4294967295);//输出FFFFFFFF
%ffloat输出float类型十进制数据。printf("%f",0.000001);//输出0.000001
%lfdouble输出double类型十进制数据。printf("%lf",0.000001);//输出0.000001
%Ffloat(double)

输出float和double类型十进制的INFINITY和NAN数据。 

printf("%F %F",INFINITY,NAN);//输出INF NAN

%efloat(double)输出float和double类型十进制科学计数数据,e是小写。

printf("%e",0.000001);//输出1.000000e-006

%Efloat(double)输出float和double类型十进制科学计数数据,e是大写。

printf("%E",0.000001);//输出1.000000E-006

%gfloat(double)

输出float和double类型十进制数据,根据数据的长度选择%f或%e方式输出。

printf("%g %g",0.000001,0.1);//输出1e-006 0.1

%Gfloat(double)输出float和double类型十进制数据,根据数据的长度,选择%f或%E方式输出。printf("%G %G",0.000001,0.1);//输出1E-006 0.1
%cchar输出char类型数据。

printf("%c",'A')//输出A

%schar*输出char*类型数据,直至输出到'\0'字符。

printf("%s","A");//输出A

%S/%lswchar_t*输出wchar_t*类型数据,直至输出到'\0'字符。printf("%S %ls",L"A",L"A");//输出A A
%pvoid*输出void*类型十六进制数据。

printf("%p","A");//输出00405064

%nint*不输出任何数据。%n对应的参数是一个指向int的指针,在此之前输出的字符数将存储到指针所指的位置。

int num=0;
printf("0123%n",&num);//输出0123

printf("%d",num);//输出4

%%char输出char类型%数据本身。

printf("%%");//输出%

%m打印errno值对应的出错内容。printf("%m\n");
%afloat(double)输出float和double类型十六进制p计数法数据,字母部分是小写。

printf("%a",0.000001);//输出0x1.0c6f7ap-20

%Afloat(double)输出float和double类型十六进制p计数法数据,字母部分是大写。printf("%A",0.000001);//输出0X1.0C6F7AP-20

注: 格式控制字符串除了指明输出的数据类型,还可以包含一些其它的可选的格式说明,依序有 flags, width, .precision and length。下面一一讲解。


标志(flags)

flags规定输出样式,取值和含义如下:

字符说明示例
-输出结果左对齐,不足右边补空格。printf("%-2d%2d",1,1);//输出1  1
+输出符号(正号或负号)printf("%+d %+d\n",1,-1);//输出+1 -1
space输出值为正时加上空格,为负时加上负号printf("% d % d\n",1,-1);//输出 1 -1
#type是%o或%x或%X时,输出增加前缀。
type是%f或%lf或%e或%E或%g或%G或%a或%A时,输出增加小数点。
type是%g、%G时,输出增加后面的0。

具体示例看下面图片。

0输出结果前面补上0。printf("%02d",1);//输出01



输出最小宽度(width)

用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下:

width说明示例
数值输出结果右对齐,不足左边补空格。printf("%2d",1);//输出 1
*不指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出。printf("%*d",2,1);//输出 1

精度(.precision)

精度格式符以.开头,后跟十进制整数。可取值如下:

.precision描述示例
.数值十进制整数。
type是%d或%i或%o或%u或%x或%X时,precision表示输出的最小的数字个数,不足补前导零,超过不截断。
type是%f或%lf或%e或%E或%a或%A时,precision表示小数点后数值位数,默认为六位,不足补后置0,超过则截断。
type是%g或%G时,precision表示可输出的最大有效数字。
type是%s时,precision表示最大可输出字符数,不足正常输出,超过则截断。
precision不指明则默认为0
具体示例看下面图片。
.*不指明输出精度,而是以星号代替,在printf的输出参数列表中给出。printf("%.*d",2,1);//输出01

注:在对浮点数和整数截断时,存在四舍五入。 


类型长度(length)

类型长度指明待输出数据的长度。因为相同类型可以有不同的长度,比如整型有16bits的short int,32bits的int,也有64bits的long int,浮点型有32bits的单精度float和64bits的双精度double。为了指明同一类型的不同长度,于是,类型长度(length)应运而生,成为格式控制字符串的一部分。

这里写图片描述

注:黄色背景行标识的类型长度说明符和相应的数据类型是C99标准引入的。

 

注: long int到底是32bits还是64bits跟生成的程序是32bits还是64bits一一对应,如果使用g++编译程序的话,可通过-m32-m64选项分别生成32bits和64bits的程序。因本人测试代码编译生成的是64bits的程序,所以long int也就是64btis。


转义字符

转义字符在字符串中会被自动转换为相应操作命令。printf()使用的常见转义字符如下:

转义字符意义
\a警报(响铃)符
\b回退符
\f换页符
\n换行符
\r回车符
\t横向制表符
\v纵向制表符
\\反斜杠
\”双引号

欢迎大家来加我自己的编程语言交流QQ群群号:387618421

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器5/article/detail/62575
推荐阅读
  

闽ICP备14008679号